首页 > 代码库 > objcet-c反汇编代码中一些特殊的用法
objcet-c反汇编代码中一些特殊的用法
_text:00036DB5 push ebp__text:00036DB6 mov ebp, esp__text:00036DB8 push ebx__text:00036DB9 push edi__text:00036DBA push esi__text:00036DBB sub esp, 1Ch__text:00036DBE call $+5__text:00036DC3__text:00036DC3 loc_36DC3: ; DATA XREF: _IOHIDEventSystemClientDispatchEvent+1Cr__text:00036DC3 pop eax__text:00036DC4 mov ecx, [ebp+arg_4]__text:00036DC7 mov [esp+4], ecx__text:00036DCB__text:00036DCB loc_36DCB: ; DATA XREF: _IOHIDEventSystemClientDispatchEvent+61r__text:00036DCB mov eax, ds:(_kCFAllocatorDefault_ptr - 36DC3h)[eax]__text:00036DD1 mov esi, dword ptr ds:(loc_36DC3 - 36DC3h)[eax]__text:00036DD3 mov [esp], esi__text:00036DD6 call _IOHIDEventCreateData__text:00036DDB test eax, eax__text:00036DDD jz loc_36E8A__text:00036DE3 mov [esp+4], eax__text:00036DE7 mov [ebp+var_10], eax__text:00036DEA mov [esp], esi__text:00036DED call __IOHIDCreateBinaryData__text:00036DF2 mov edi, eax
1、call +$5 是常用的反静态汇编技巧,实际上就是CALL下一条指令,然后将返回地址pop 到eax 得到当前指令的地址。
2、__text:00036DCB mov eax, ds:(_kCFAllocatorDefault_ptr - 36DC3h)[eax],这条指令也有可能让人看不懂,下面结合指令来分析。
该条命令的字节码为:8B 80 49 12 04 00
8B 80 可以看作是 mov eax,[eax]
加上49 12 04 00 就是 mov eax,[eax+0x041249]
在 call + $5后 pop返回地址 到eax,等于代码地址
而0x041249又代表什么偏移呢。
我们看到 _kCFAllocatorDefault_ptr 的地址为:0x7800c
__nl_symbol_ptr:0007800C _kCFAllocatorDefault_ptr dd offset
0x7800c - 0x36DC3 = 041249,可以知道041249 实际上是代码段到 _kCFAllocatorDefault_ptr 相对偏移,不管代码段加载到什么位置,总是能够定位到该函数指针。
__text:00037E16 mov eax, dword ptr ds:(loc_37DCB - 37DC3h)[eax]
00037E16 8B 40 08
结合指令 分析就是 mov eax,[eax + 8]
objcet-c反汇编代码中一些特殊的用法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。