2011-05-10 246 views
0

尝试查找特定偏移量对应的目标文件的代码时,我有点困惑。偏移量为0xB71B13E8使用objdump查找目标文件的偏移量

使用proc/<PID>/maps,我发现目标进程的libX11 lib的文本代码已映射到0xB70CC000-0xB71B7000区域。

我现在想用objdump在X11 lib /usr/lib/libX11.so.6.2.0的目标文件上找到这个偏移量。

我应该看看0xB71B7000 - 0xB71B13E8 = 0x5C18还是0xB71B13E8 - 0xB70CC000 = 0xE53E8

我的另一个问题是: 0xB70CC000-0xB71B7000其中libX11 lib的文本代码所在的区域是0xEB000字节。然而,当我objdump /usr/lib/libX11.so.6.2.0我可以看到偏移从0xA3517 to 0x135C0(即只有0x8FF57)开始。这有什么理由吗?

在此先感谢。

回答

0

/proc/X/maps中的rx节的第一个地址(也可以使用'pmap X')是库的第一个虚拟地址,而objdump --disassemble显示的偏移量是虚拟的地址假设开始为0.您感兴趣的地址是0xE53E8(假设您给出的数字来自于查看rx映射),因此请在objdump --disassemble输出中查找该地址以查找正确的代码位置。

请注意,您可以使用gdb直接查看正在运行的程序的内存。启动gdb,然后运行'attach X',其中X是正在运行的程序的PID,然后'反汇编0xB71B13E8'。