2011-01-06 48 views
1
int myvar=100; 

main() 
{ 
    pid_t (*f) (void); 
    int *ip; 
    int myvar=10; 

    f = (pid_t(*) (void)) dlsym(RTLD_NEXT, "getpid"); 
    ip = (int *) dlsym(RTLD_NEXT, "errno"); 
    if (ip) 
    printf("%d \r\n", *ip); 
    ip = (int *) dlsym(RTLD_NEXT, "myvar"); 
    if (ip) 
    printf("%d \r\n", *ip); //not work where is i am wrong 
} 
+0

您能否为此问题添加更多描述?你有什么问题?你有什么尝试?你想做什么?上下文使得回答问题变得更容易。 – templatetypedef 2011-01-06 08:00:22

+0

铸造`dlsym`毫无意义。 – user562374 2011-01-06 11:42:12

回答

1

myvar不会被一般导出到动态符号表,除非你的连接时,它使用一个链接器标志像-rdynamic

2

getpiderrno符号由libc导出。 myvvar符号位于您的可执行文件中,可能未导出。

Objdump -T将帮助您检查符号是否导出。

$ objdump -T /lib/libc.so.6 | grep -w getpid 
00c9c570 g DF .text 00000036 GLIBC_2.0 getpid 
0

你为什么不使用C++范围操作:

::myvar = myvar + 1; 

,然后命名空间。