逆向练习001——获取CPU信息

本文通过滴水的逆向练习,深入探讨如何获取CPU信息。主要内容涉及代码分析,重点关注特定指令的作用,如leave指令是否恢复原函数栈底,以及eax到edi的值传递目的。

 一直到今天才找到滴水的逆向练习

arg_0= dword ptr  8
arg_4= dword ptr  0Ch

push    ebp             //保存当前执行函数栈栈底
mov     ebp, esp        //平栈,将当前函数栈顶赋给栈底,相当于开辟新空间执行下面的代码
push    ebx                     
push    edi             //使用中的寄存器压栈,当前函数执行完之后需要将两个寄存器中原先的值弹回寄存器

mov     eax, [ebp+arg_0]
mov     edi, [ebp+arg_4]
mov     [edi], eax
cpuid
mov     [edi+4], eax
mov     [edi+8], ebx
mov     [edi+0Ch], ecx
mov     [edi+10h], edx


pop     edi
pop     ebx              //弹回原先寄存器
leave
retn    8

重点分析中间代码

mov     eax, [ebp+arg_0]             
mov     edi, [ebp+arg_4]            //只能分析出将栈空间中两个值存入寄存器,具体这两个值是什么未知
mov     [edi], eax                  //将存入eax中的值存入edi中存的地址值,由此得出[ebp+arg_4]中存的是个指针变量
cpuid                                //百度查了半天才知道,cpuid是获取cpu的信息,返回值会存在下面四个寄存器中
mov     [edi+4], eax                
mov     [edi+8], ebx
mov     [edi+0Ch], ecx
mov     [edi+10h], edx                //将四个寄存器中的值依次存入edi存放的地址位置

由此大概可以推断出,该函数的功能应该是获取CPU信息

问题:最后的leave指令是否将压栈的原函数栈底弹回来了???

为什么中间要将存入eax中的值存入edi中存放的地址???

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值