2011-01-06 11 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

+0

'dlsym'をキャストするのは無意味です。 – user562374

答えて

1

myvarは、一般的に、ダイナミックシンボルテーブルにエクスポートされません。

::myvar = myvar + 1; 

、その後、名前空間:

+0

RTLD_NEXTを使うmemeryの場所を取得しませんが、RTLD_DEFAULTのときに私はそれを理解できません – nitinrakh

2

getpidおよびerrnoシンボルは、libcによってエクスポートされます。 myvvarシンボルは実行可能ファイルにあり、おそらくエクスポートされません。

Objdump -Tは、シンボルがエクスポートされているかどうかを確認するのに役立ちます。それをリンクするときに-rdynamicようにリンカフラグを使用しない限り

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

は、なぜあなたはC++のスコープ演算子を使用しないでください。

関連する問題