我正在调试一个我没有源代码的 ios 应用程序,它是一个剥离的二进制文件,所以没有我可以使用的符号。因此,我在 IDA 和 class-dump 的帮助下使用地址来设置 bps。我遇到过我无法真正理解特定方法的返回值或参数的情况。我知道参数应该在 $r2 寄存器上,并且方法的返回值在 $r0 上。
让我们采用返回 NSData* 指针的 subDataWithRange 方法。当然,我不能做“po pointer_addr”,因为我没有符号,因此 gdb 失败。所以,我正在尝试自己检查内容。尽管我很确定应该返回的字节,但我确实检索了一个指针,但是当我执行“x/20x $r0”之类的操作来检查其内容时,我看不到有意义的字节。
因此,我想询问 NSData* 对象和其他 ios 对象(如 NSString)的结构,因为它们会出现在内存中的原始字节中。结构是什么样的?结构内部是否有一个指针我无法找到,它实际上指向返回的字节?