我连接到iphone的debugserver并能够发送GDB Serial Protocol个数据包。我可以设置断点并等到它达到。当它想要用已知参数调用objc_msgSend时,获取它的输出并继续执行。现在我在xcode和lldb中模拟它的进程,所以我不能只使用'call objc_msgSend(object,_cmd)'。
我做了什么:所以我调用了我的方法,但随后应用程序崩溃,永远不会到达我的'返回地址'0x0x0000253a。它还用返回值重写r0,所以我的方法完全不完整。我知道我所做的是硬核覆盖寄存器而不存储和恢复以前的值,所以请帮忙。我如何存储/恢复寄存器状态,我做错了什么或者我不做什么必要的事情?
在“调用objc_msgSend”时跟踪xcode的调试器是非常有帮助的。我尝试使用this code和fruitstrap来使用dtruss,然后研究它的输出 - 它有成千上万的内存读取和断点集,对我来说没用。
注意:我只能使用GDB串行协议。