wechat红包插件,最后一个函数OpenRedEnvelopesRequest是怎么推倒出来的

参照网上的步骤http://blog.csdn.net/heiby/article/details/51792151

lldb解析下面函数具体做了什么[WCRedEnvelopesReceiveControlLogic WCRedEnvelopesReceiveHomeViewOpenRedEnvelopes]

这个方法每一行汇编代码都NI了一次,但是没有发现OpenRedEnvelopesRequest: 这个方法的调用
但基本上 市面上的 插件都是调用[WCRedEnvelopesLogicMg OpenRedEnvelopesRequest: params]这个方法或者[WCRedEnvelopesLogicMg ReceiverQueryRedEnvelopesRequest:params];

环境 5s 9.1 6.5.5版本wechat

提示你一下,6.5.18的OpenRedEnvelopesRequest是在一个block里面的

对于汇编代码我只知道BL是执行函数,x1是函数名 , x0 x2…是参数,图中sub_1013dddf0是怎么被调用的求告诉

终于解决了,
结论: [WCPayLogicMgr checkHongbaoOpenLicense:acceptCallback:denyCallback:]方法的内部 00000001010DEC2C :BLR X8 ,用si命令进入内部 跳到 0x1013DDE64,这个位置包含了最终代码: OpenRedEnvelopesRequest
找到最终函数 ,还是 用bt 最终方法逆向出来的,正向找还更难!

1 个赞

bt是变态的意思么

查看堆栈信息

soga 哈哈。

[WCPayLogicMgr checkHongbaoOpenLicense:acceptCallback:denyCallback:] 下面那个 _objc_msgSend 断点么 然后si 进入内部 不过我没看到这个OpenRedEnvelopesRequest ,有些东西还不怎么会用

进入block内部 查看参数 x2=0 然后找x3的位置
(lldb) po (char *)$x3
<NSStackBlock: 0x16fd015e8>

(lldb) memory read --size 8 --format x 0x16fd015e8
0x16fd015e8: 0x000000019cf4d088 0x00000000c2000000
0x16fd015f8: 0x000000010169f184 0x00000001037746c0
0x16fd01608: 0x00000001534b78e0 0x0000000152b4e7a0
0x16fd01618: 0x0000000152b4e7a0 0x00000001536348b0

x3=0x000000010169f184-偏移量

可以得到
[[[%c(MMServiceCenter) defaultCenter] getService:[%c(WCRedEnvelopesLogicMgr) class]] OpenRedEnvelopesRequest:??];X2, [X19,#0x20] x19指向WCRedEnvelopesReceiveControlLogic

这个是 block后的 function- - 感觉应该不是这样分析 应该错了

人呢