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 :(得分:2)
libc导出getpid
和errno
符号。
myvvar
符号位于您的可执行文件中,可能未导出。
Objdump -T将帮助您检查符号是否已导出。
$ objdump -T /lib/libc.so.6 | grep -w getpid
00c9c570 g DF .text 00000036 GLIBC_2.0 getpid
答案 1 :(得分:1)
myvar
通常不会导出到动态符号表中,除非您在链接时使用-rdynamic
之类的链接器标记。
答案 2 :(得分:0)
为什么不使用C ++范围运算符:
::myvar = myvar + 1;
然后命名空间。