【问题标题】:GDB : changing the assembly code of a running programGDB:更改正在运行的程序的汇编代码
【发布时间】:2011-12-10 07:30:48
【问题描述】:

我成功地将指令更改为NOP,因为它非常基本:

set *0x08048e3a = 0x90

但我正在尝试更改此地址 0x08048e3a,其中包含 je 0x8048e52。我想改成je 0x8048ea8

但是当我做set *0x08048e3a = 0x74168048ea8 时它不起作用。 (0x7416 = je 指令)

谢谢

【问题讨论】:

    标签: assembly gdb


    【解决方案1】:

    0x74168048ea8 比一个词长。您应该尝试逐个设置字节,例如

      set *(char*)0x08048e3a = 0x74
      set *(char*)0x08048e3b = 0x16
    

    【讨论】:

    • 另请注意,在 x86 上,CALLJMP 指令是 PC 相关的(也就是说,指令的实际字节将 offset 从当前指令编码到跳转目标(更准确地说,从 next 指令偏移))。因此,如果你想JE 0x8048ea8,实际的指令字节将包含0x8048ea8
    • 感谢您的回答。我坚持认为 16 是“je”指令的一部分。但这是跳转到的偏移量。
    • 为了节省一些输入,您可以像 set *(char*)0x08048e3a@5={0x74,0x16,0x80,0x48,0xea} 一样一次设置一些字节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多