2011-01-06 62 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; 

,然後命名空間。