我正在学习OllyDbg中的汇编程序和调试技巧,以学习如何使用未记录的函数.现在我遇到以下问题:
我有以下代码部分(来自OllyDbg):
MOV EDI,EDI
PUSH EBP
MOV EBP,ESP
MOV EAX, DWORD PTR SS:[EBP+8]
XOR EDX,EDX
LEA ECX, DWORD PTR DS:[EAX+4]
MOV DWORD PTR DS:[EAX], EDX
MOV DWORD PTR DS:[ECX+4],ECX
MOV DWORD PTR DS:[ECX],ECX
MOV DWORD PTR DS:[EAX+C],ECX
MOV ECX, DWORD PTR SS:[EBP+C]
Run Code Online (Sandbox Code Playgroud)
这是函数的开始,目标是查找数据结构.所以我发现它首先将EBP推入堆栈,然后将ESP(当前堆栈指针)移动到EBP,我认为它现在定义了该函数的堆栈帧.现在教程说在流行的布局中,第一个参数位于[EBP + 8],第二个参数位于[EBP + C]
这是我不明白的.我怎么知道第一个参数放在EBP + 8?
希望有人可以帮助我!谢谢!
我有以下ASM代码(OllyDbg),它应该包含用c开发的结构.有人能告诉我结构在c编程语言中是怎么样的吗?也许稍微解释一下你如何弄清楚结构中存储的内容等等......
非常感谢你!
CPU Disasm
Address Hex dump Command Comments
6A27F058 /$ 68 E9A6286A PUSH 6A28A6E9 ; Entry point
6A27F05D |. 64:FF35 00000 PUSH DWORD PTR FS:[0]
6A27F064 |. 8B4424 10 MOV EAX,DWORD PTR SS:[ESP+10]
6A27F068 |. 896C24 10 MOV DWORD PTR SS:[ESP+10],EBP
6A27F06C |. 8D6C24 10 LEA EBP,[ESP+10]
6A27F070 |. 2BE0 SUB ESP,EAX
6A27F072 |. 53 PUSH EBX
6A27F073 |. 56 PUSH ESI
6A27F074 |. 57 PUSH EDI
6A27F075 |. A1 E067336A MOV EAX,DWORD PTR DS:[6A3367E0]
6A27F07A |. 3145 FC …Run Code Online (Sandbox Code Playgroud)