我有一个需要使用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
谢谢