码迷,mamicode.com
首页 > 其他好文 > 详细

objcet-c反汇编代码中一些特殊的用法

时间:2015-01-06 22:56:57      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/famer/p/4207078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!