逆向中获取 Block 的参数和返回值

很强势,学习了。 开源精神万岁!

拿到block具体函数地址下断点后,如何直接打印回调回来的参数呢?po $r2 类似这样,不行

自己解决了,感觉自己萌萌哒,原来参数是从 po $r1 开始的

你好,郭总 . memory read --size 4 --format x 0x16fd8a958 中的 0x16fd8a958 是怎么算出来的.能教一下吗?

这个应该是作者笔误的。不存在0x16fd8a958,只存在上面拿invoke函数指针时的0x16fd88f88

memory read --size 8 --format x 0x16fd88f88

换成每个单元4个字节输出:

memory read --size 4 --format x 0x16fd88f88

输出结果的第3个值0xc2000000就是flags的int值。

(lldb) expr -- ((0xc2000000 & (1 << 30)) != 0)
(bool) $28 = true

就说明block有签名。

兄弟谢谢,解惑:grinning:

我想hook一个block的返回值 怎么获取呢?? 没啥头绪

保存原来block的函数指针,自己准备一个新的函数并用自己这个函数的指针替换原来block里的函数指针,自己的block里按需要调用原来的函数或直接修改返回值

摸索了一上午 保存原来block的函数指针、替换原来block里的函数指针,这两步不晓得如何操作,整体逻辑很明白 就是hook函数 修改或查看参数。

正向的block 也只是会简单得用起来 没太深入理解

我是用MABlockClosure,可以在XM文件里复制一个,id cp = [arg1 copy] ,然后传给MABlockClosure,它会打印出block的函数参数信息,以及返回。

MABlockClosure是啥 有相关解说 最好是demo么

MABlockClosure

感谢感谢:pray:

现在的版本编译不了 怎么办啊

用MABlockClosure闪退 什么原因

麻烦问一下 reserved这个字段为什么没有了呢? 按说实现函数的指针不应该是第4段也就是第24个字节后面吗? 实际操作也确实没有reserved。 但是Block_descriptor_1中的reserved还是有一个0x000000在。

大佬,O(∩_∩)O谢谢分享

libffi-ios 请教一下你是咋装上去的?

我的报错fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can’t open input file: armv6-ios/.libs/libffi.a (No such file or directory)

楼主您好,您的这篇帖子写的太好了,只是里面有一张图挂了,请问有办法可以找回吗?
图片位于“ 找出 Block 的函数体地址”中,谢谢。

1 个赞