首页 > 代码库 > 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反汇编代码中一些特殊的用法