了解汇编代码

时间:2014-06-06 16:22:30

标签: assembly x86

...
MOV ECX, DWORD PTR DS:[__argc_dll]
MOV EAX, DWORD PTR SS:[EBP+0x8]
MOV DWORD PTR DS:[EAX], ECX
MOV ECX, DWORD PTR SS:[EBP+0xC]
MOV EDX, DWORD PTR DS:[__argv_dll]
MOV EAX, DWORD PTR DS:[EBP+0x10]
POP EBP
...

所以我写了下面的代码(在C中):

int ecx = 0;
ecx = 1;       //because the value in [__argc_dll] was 00000001

int *func1 = &00404020;         //because [EBP+0x8]=00404020

int *eax = *func1;              // is the assembly line MOV EAX, DWORD PTR SS:[EBP+0x8]
eax = ecx;                      // is the assembly line MOV DWORD PTR DS:[EAX], ECX


type *func2 = &00404024;       // because [EBP+0xC]=00404024
type *ecx   = &func2;          //  MOV ECX, DWORD PTR SS:[EBP+0xC]

type *edx   = &argv_dll        //is the assembly lineMOV EDX, DWORD PTR DS:[__argv_dll]


type *func3 = &00404028;       // because [EBP+0x10]=00404028
type *eax = &func3;            //the line: MOV EAX, DWORD PTR DS:[EBP+0x10]

所以我的问题是: 这是正确的表述吗?我必须承认我是关于指针概念的新手。 所以我做的是: 我假设堆栈地址[EBP + 0x8],[EBP + 0xC]和[EBP + 0x10]上的3个值是普通地址,并在它们的前3个指针处创建。 在我创建了像* eax之类的其他指针之后,它们也指向了这些地址。

我的第二个问题是: 如何在汇编代码末尾实现像 POP EBP 这样的弹出操作?我真的需要它代表吗?我会说不,或者?

Ollydbg在该行显示EBP位于

Stack [EBP]=[0012FF40]=0012FF88
EBP = 0012FF40 

在那次手术后我有EBP = 0012FF88。

0 个答案:

没有答案