文章目录
一、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
将栈指针保存到 ebp 中 : 程序执行过程中 , esp 是栈的地址 , 程序执行过程中需要用到 esp 变量 , 最好不要直接修改 esp , 这里将 esp 拷贝到 ebp 中 , ebp 全程没有修改以及使用 , 函数执行完毕后 , 再将 ebp 出栈 , 还原即可 ;
push ebp mov ebp, esp
使用完毕之后 , 会进行出栈操作 :
pop ebp
其它的寄存器变量值 , 也进行入栈 , 保护这些值 , 函数执行完毕后再出栈 , 将这些值还原 , 其中 eax 不用入栈 , eax 用于记录返回值 , 该值是肯定要进行修改的 ;
push ebx push edi push esi