【发布时间】:2014-04-21 19:31:22
【问题描述】:
我做“打印系统”时如何获取GDB给出的地址?
假设,如果我启动程序然后立即暂停它,然后查看 /proc/$pid/maps 并获取库的基地址。然后我需要在 libc.so.6 中找到 system() 的偏移量并将这两个加在一起。但是,当我在实践中尝试此操作时,我最终得到的地址与 gdb 提供的地址不同。
获取 system() 地址的最佳方法是什么?
请注意,我正在尝试获取另一个程序的地址,而不是我自己编译的那个。
【问题讨论】:
-
你为什么要这样做?
-
偏移量是指代码的文件偏移量还是虚拟地址?你明白其中的区别吗?
-
在 linux 上,函数指针可以转换为 void *.所以例如
void *ptr = system; printf("%p\n", ptr);虽然这可能无法解决您实际尝试做的事情。 ` -
@nos 他可能想侵入另一个进程并让它产生一些其他进程。另一种选择:用他自己的
system调用的东西不起作用,所以他正在寻找异常。如果是这样,那么他可能找错地方了。 -
@nos 我认为这样会打印当前可执行文件中
system存根的地址