【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | x86 汇编语言分析 )

举报
韩曙亮 发表于 2022/01/11 01:09:13 2022/01/11
【摘要】 文章目录 一、x86 汇编语言分析 一、x86 汇编语言分析 在上一篇博客 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 ...





一、x86 汇编语言分析



在上一篇博客 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 ) 中 , 使用 IDA 反编译 Android SDK 中的 D:\001_Develop\001_SDK\Sdk\build-tools\26.0.3\renderscript\lib\intermediates\x86\libc.so 文件 , 并查找其中的 fork 方法 ;

本篇博客中分析该 libc.so 动态库中的 fork 方法的汇编代码 ;


分析 fork 方法的 x86 汇编代码 :

在这里插入图片描述

汇编代码内容 :

public fork
fork proc near
; __unwind {
push    ebp
mov     ebp, esp
push    ebx
push    edi
push    esi
and     esp, 0FFFFFFF0h
sub     esp, 10h
call    $+5
pop     ebx
add     ebx, 0C75E7h
call    _Z27__bionic_atfork_run_preparev ; __bionic_atfork_run_prepare(void)
mov     eax, large gs:0
test    eax, eax
jz      short loc_161EC

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

将栈指针保存到 ebp 中 : 程序执行过程中 , esp 是栈的地址 , 程序执行过程中需要用到 esp 变量 , 最好不要直接修改 esp , 这里将 esp 拷贝到 ebp 中 , ebp 全程没有修改以及使用 , 函数执行完毕后 , 再将 ebp 出栈 , 还原即可 ;

push    ebp
mov     ebp, esp

  
 
  • 1
  • 2

在这里插入图片描述


使用完毕之后 , 会进行出栈操作 :

pop     ebp

  
 
  • 1

在这里插入图片描述


其它的寄存器变量值 , 也进行入栈 , 保护这些值 , 函数执行完毕后再出栈 , 将这些值还原 , 其中 eax 不用入栈 , eax 用于记录返回值 , 该值是肯定要进行修改的 ;

push    ebx
push    edi
push    esi

  
 
  • 1
  • 2
  • 3

在这里插入图片描述


and 与操作 , 取 esp 的低 16 16 16 位 , 然后与操作的结果 减去 10h ;

and     esp, 0FFFFFFF0h
sub     esp, 10h

  
 
  • 1
  • 2

在这里插入图片描述


$+5 的含义是当前指令 + 5 , 即执行下一条指令 , 每个指令的长度是 5 5 5 字节 ; 该指令可能是为了兼容 arm 代码而生成的 ; 调用 call 指令后 , 会将下一条要执行的指令放到栈中 ;

call    $+5

  
 
  • 1

在这里插入图片描述

该行指令对应的机器码如下 :

在这里插入图片描述


上面 call 调用后 , 会将下一条要执行的指令地址放到栈中 ;

这里使用 pop 将指令地址从栈中取出 , 放到 ebx 中 ;

从栈中取到的值实际上是 EIP , 当前位置 ;

pop     ebx

  
 
  • 1

在这里插入图片描述

将当前的地址 加上 0C75E7h 值 , 最终加法运算的结果作为传入下一个函数 __bionic_atfork_run_prepare 的参数 ;

add     ebx, 0C75E7h

  
 
  • 1

在这里插入图片描述

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/120723361

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。