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 什么都不做。