iOS: LLDB对内存的读取和修改

Xcode的调试器LLDB提供了许多有趣的调试指令,下面来看看针对内存数据的读取和修改指令。

为了更好地演示,先写一段测试代码,如下:

OK!然后在bytes变量后加入断点,运行,接着在Xcode下方输入调试指令。

首先是LLDB的内存读取指令,这个其实可以用memory read指令,但是这个指令写起来太繁琐了,幸好LLDB继承了GDB的x命令,可以快速的用简短的指令来完成多种内存读取操作。

比如显示bytes变量前三个int的内容:

这里x代表用16进制来显示结果,w代表Word(16位)大小。所以x/3xw就是用16进制来显示bytes所指空间的3个16位的元素内容。对于x命令的详细格式可以参考,这篇文章,或者这篇。

常见的大小格式为:b – byte 1字节,h – half word 2字节,w – word 4字节和最后的g – giant word 8字节。

格式字符串则类似printf,x是16进制,f是浮点,d是十进制等等。

后面的地址变量也可以加表达式,如果有表达式的化需用单引号扩上内容。OK,有了上面的知识,我们可以做更多有意思的事情。

比如,查看后四个字节(也就是第二个int,注意表达式需用单引号扩住):

显示后面3个double的内容:

或者显示全部36个字节:

至于内存数据的写入,对应LLDB的memory write命令,这里LLDB没有继承GDB的set命令,所以只能直接用memory write。注意可以通过-s参数来指定写入数据的大小,同时memory write也支持写入多个值。

比如:把第二个字节设置为1:

可以看到,这里写入的1大小默认是字节。也可以使用-s参数指定一个大小,比如把第二个int设置成15:

最后,多值写入,把bytes的前8字节写入4个2字节的数字,分别是1,2,3,4:

留下评论