1)。関数のアドレスを直接出力:
printf("strerror=%p, strerror_r=%p\n", strerror, strerror_r);
strerror=0x8049ec0, strerror_r=0x8049e20
2)。dlsym バージョン:
rtldDefault= dlopen(0, RTLD_NOW | RTLD_GLOBAL);
dlsym(rtldDefault, "strerror_r"); ==> strerror_r=0xb76544e0
しかし
dlsym(rtldDefault, "strerror"); ==> strerror=0x8049ec0
3)。その他:
dlsym((void*)0, "strerror_r") ==> strerror_r=0xb76544e0
dlsym((void*)-1, "strerror_r") ==> strerror_r=0xb76544e0
strerror_r=0x8049e20
を使用するにはどうすればよいdlsym()
ですか?
最初に strerror_r のアドレスを出力してから、dlsym() を呼び出します。
strerror_r=0xb76544e0 は間違ったアドレスです。このアドレスで strerror_r を呼び出しても何もしません。