Assembly GDB:更改正在运行的程序的汇编代码

Assembly GDB:更改正在运行的程序的汇编代码,assembly,gdb,Assembly,Gdb,我成功地将指令更改为NOP,因为它非常基本: set *0x08048e3a = 0x90 但我正在尝试更改此地址0x08048e3a,它具有je 0x8048e52。我想将其更改为je0x8048ea8 但是,当我设置*0x08048e3a=0x74168048ea8时,它不起作用。 (0x7416=je指令) 谢谢你0x74168048ea8比一个字还长。您应该尝试逐个设置字节,例如 set *(char*)0x08048e3a = 0x74 set *(char*)0x08048

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

set *0x08048e3a = 0x90
但我正在尝试更改此地址
0x08048e3a
,它具有
je 0x8048e52
。我想将其更改为
je0x8048ea8

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


谢谢你

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

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

etc

还请注意,在x86上,
调用
JMP
指令是PC相关的(也就是说,指令的实际字节编码从当前指令到跳转目标的偏移量(更准确地说,是从下一条指令的偏移量))。因此,如果您想
JE 0x8048ea8
,实际指令字节将不包含
0x8048ea8
。谢谢您的回答。我认为16是“je”指令的一部分。但它是要跳转到的偏移量。要保存一些键入,可以像set*(char*)中那样一次设置一些字节0x08048e3a@5={0x74,0x16,0x80,0x48,0xea}