我有一个需要使用 GDB 修补的程序。问题是有一行代码进行“小于或等于测试”并且失败导致程序以分段错误结束。该程序已经编译,我没有源代码,所以我显然无法更改源代码。但是,使用 GDB,我能够找到 <= 测试完成的位置,然后我能够找到您可以在下面看到的内存地址。
(gdb) x/100i $pc
... removed extra lines ...
0x7ffff7acb377: jle 0x7ffff7acb3b1
....
我需要做的就是将测试更改为“大于或等于”测试,然后程序应该可以正常运行。jle 的操作码是 0x7e,我需要将其更改为 0x7d。我的作业提供了有关如何执行此操作的说明,如下所示:
$ gdb -write -q programtomodify
(gdb) set {unsigned char} 0x8040856f = 0x7d
(gdb) quit
所以我尝试了一下,得到...
$ gdb -write -q player
(gdb) set {unsigned char} 0x7ffff7acb377 = 0x7d
Cannot access memory at address 0x7ffff7acb377
我尝试了各种其他内存地址,无论我尝试什么,我都会得到相同的响应。这是我唯一的问题,此时我不在乎是错误的地址还是错误的操作码指令,我只想能够修改内存。
我正在通过 VMware Player 运行 Linux Mint 14
感谢