GDB如何从文件偏移量设置观察点?

时间:2018-01-24 09:21:58

标签: gdb reverse-engineering

所以我使用十六进制编辑器和gdb对二进制文件进行逆向工程,可执行文件没有调试信息供我使用。如何在二进制运行中的给定偏移处设置观察点?

例如:

在可执行文件中有一个偏移量为0x85c6d的字节,我想在那里设置一个观察点。我将如何在gdb中执行此操作?有可能吗?

我已经尝试watch 0x85c6dwatch *0x85c6d,但第一个根本没有工作,第二个设置了ram而不是实际文件的偏移量。我通过docs查看了观察点无济于事。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

  

有可能吗?

是:您需要弄清楚在内存中该地址的最终位置,并在该内存位置设置一个观察点。

如果这是ELF二进制文件,readelf -l a.out将告诉您文件的哪些部分加载到哪个地址(您关心LOAD段)。

例如:

readelf -Wl a.out | grep LOAD
  LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x000638 0x000638 R E 0x200000
  LOAD           0x000e48 0x0000000000600e48 0x0000000000600e48 0x0001e0 0x0001e8 RW  0x200000

这告诉您文件中从偏移量0开始的可执行代码将加载到地址0x400000的内存中,而来自偏移0xe48的数据将加载到0x600e48的内存中。

PIE二进制文件有点复杂:你需要添加初始加载地址,这可以从执行变为执行。好消息:GDB默认禁用随机化,因此当程序在GDB下运行时,初始加载地址不会因运行而异。

您可以使用(gdb) info proc map命令找到初始加载地址。