逆向ios block参数类型,但是遇到问题,读取内存报错: memory read failed for 0x48c78948d07d8800
如图所示,写了一个测试代码,断点想获取t这个block的签名,从而获取block类型,但是在读取block
descriptor的时候始终报这个错,读取内存失败。不知道是为什么。有大佬给解释一下吗?
逆向ios block参数类型,但是遇到问题,读取内存报错: memory read failed for 0x48c78948d07d8800
没人能指点一下么?
你觉的 0x48c78948d07d8800 这个地址对吗
都提示读取失败了,那肯定是不对的,但是0x48c78948d07d8948这个地址就是descriptor的地址啊
这结论是哪来的
block 地址 0x0000000100e46e00是这个,
void *isa;
int flags;
int reserved;
void (*invoke)(void *, ...);
struct Block_descriptor_1;
8+4+4+8=24,也就是偏移24是descriptor。是不是这样的?
前一阵我还用这个方式在monkeydev里面成功得到block签名的,最近想再继续研究一下,结果不行了。
po t 拿到的是 block_invoker 地址而非 block_isa,而且这个地址是 invoke 的代码段地址,所以你拿到的那些都是机器码。最简单的办法就是用 NSLog(@"%@", theBlock) 拿到 block_isa 的地址。
block 指针根据你的语义所对应的值会有变化,比如入参中的值,拿到的是 invoke 指向的函数地址;但如果用类似 void *theBlock = (void *)block 的方式,则 theBlock 是 block_ptr 的地址,也就是 block 的起始地址。
确实是block地址错了,block_isa的地址搞错了