如何从GDB获取值后编辑二进制文件

时间:2012-11-17 14:42:20

标签: objective-c ios gdb

我使用GDB并希望修改iOS应用。 (例如:改变游戏中的得分)

所以,我设置了断点,例如:

b *0x0032c870

在断点处,我输入

info r

之后,gdb显示

r0             0x92717c0    153556928
r1             0x7d47a0 8210336
r2             0x0  0

现在我知道我需要的是将r2改为1

set $r2=1

现在游戏中的价值会发生变化。

好的,有一个问题,如何在hexeditor中编辑以设置r2 = 1而不是每次都使用gdb?

谢谢

1 个答案:

答案 0 :(得分:1)

  

如何在hexeditor中编辑以设置r2 = 1而不是每次使用gdb

不能r2的值是寄存器的值;在程序运行之前它不存在。

您需要做的是弄清楚该值加载到注册表中的位置,并更改代码 以使其加载1而不是0

根据加载值的方式,这可能非常简单或棘手:如果将其作为常量加载(只需更改指令以加载不同的常量),则很容易。但是很有可能它被作为某个函数的返回值加载,在这种情况下,你必须更改该函数以返回不同的值。