GDB修补导致"无法访问地址0x处的内存

Eri*_*c T 5 gdb patch

我有一个程序需要使用GDB进行修补.问题是存在一行代码,使得"小于或等于测试"并且导致程序以分段错误结束失败.该程序已经编译,我没有源代码,因此我无法明显更改源代码.但是,使用GDB,我能够找到<=测试完成的位置,然后我能够找到您可以在下面看到的内存地址.

    (gdb) x/100i $pc
    ... removed extra lines ...
    0x7ffff7acb377:      jle    0x7ffff7acb3b1
    ....
Run Code Online (Sandbox Code Playgroud)

我需要做的就是将测试更改为"大于或等于"测试,然后程序运行正常.jle的操作码是0x7e,我需要将其更改为0x7d.我的作业提供了如何执行此操作的说明,如下所示:

    $ gdb -write -q programtomodify
    (gdb) set {unsigned char} 0x8040856f = 0x7d
    (gdb) quit
Run Code Online (Sandbox Code Playgroud)

所以我试试看......

    $ gdb -write -q player
    (gdb) set {unsigned char} 0x7ffff7acb377 = 0x7d
    Cannot access memory at address 0x7ffff7acb377
Run Code Online (Sandbox Code Playgroud)

我尝试了各种其他内存地址,无论我尝试什么,我得到相同的响应.这是我唯一的问题,我不关心这是错误的地址还是错误的操作码指令,我只是想能够修改内存.

我通过VMware Player运行Linux Mint 14

谢谢

Emp*_*ian 2

Cannot access memory at address 0x7ffff7acb377

您正在尝试写入某个共享库所在的地址。您可以找出哪个库与info sym 0x7ffff7acb377.

当您尝试执行补丁时,所述共享库尚未加载,这解释了您收到的消息。

运行程序到main. 然后您应该能够写入该地址。但是,您需要拥有该库的写权限才能使您的写入“坚持”。