标签:开始 分析 进程 erp 数字 大小 数据窗 优化 讲座
本笔记使用汇编指令为x86架构下汇编指令,ARM架构汇编指令不做介绍
(Intel Architecture 32 位, IA-32)
“crackme-破解我”
栈帧用于在程序中申明局部变量、调用函数
PUSH EBP ; 函数开始
MOV EBP, ESP ; 保存当前ESP到EBP中
... ; 函数体
... ; 无论ESP值如何变化,EBP都保持不变,可以安全地访问函数的局部变量、参数
MOV ESP, EBP ; 将函数的起始地址返回到ESP,局部变量不在有效
POP EBP ; 函数返回前弹出保存在栈中的EBP值
RETN ; 函数终止,返回CALL指令的下一条指令
DWORD PTR SS:[EBP-4], 1
-->*(DWORD*)(EBP-4) = 1
(即:*(EBP-4) = (DWORD*)1
)CALL
命令进入被调函数之前,CPU会先把函数的返回地址(即CALL
下一条指令的地址)压入栈中,用作函数执行完毕后的返回地址。-Disasm
可以设置显示“默认段”和“内存大小”;-Analysis 1
可以设置显示“局部变量”、“函数参数”。TEST AX, Ax
JE 403408
if(AX == 0)
goto 403408
CALL xxxx
之后会有ADD ESP, 8
来调整栈顶指针位置。RETN 8
即RETN + POP 8
Lena在[http://www.tuts4you.com/]公示板上贴了40多个crackme讲座
CALL
指令之前的地址start和调用结束之后的地址end(可以在栈中查看),则参数个数为(end-start)/4
(因为是32bit,所以4bytes为一个参数)。(下一部分为:RE-2 PE文件格式)
标签:开始 分析 进程 erp 数字 大小 数据窗 优化 讲座
原文地址:https://www.cnblogs.com/libbin/p/11624332.html