- 论坛徽章:
- 0
|
第三章大量的用到了堆栈,晕了。
请高手们讲一下调用MemCpy前后的堆栈变化,MemCpy是另一个文件里的,被include进来的:
例如- PagingDemo:
- mov ax, cs
- mov ds, ax
- mov ax, SelectorFlatRW
- mov es, ax
- push LenFoo ;函数长度
- push OffsetFoo ;函数起始地址
- push ProcFoo ;00401000h
- call MemCpy
- add esp, 12 ;相当于弹出压入的参数
- .......
复制代码- MemCpy:
- push ebp
- mov ebp, esp
- push esi
- push edi
- push ecx
- mov edi, [ebp + 8] ; Destination
- mov esi, [ebp + 12] ; Source
- mov ecx, [ebp + 16] ; Counter
- .1:
- cmp ecx, 0 ; 判断计数器
- jz .2 ; 计数器为零时跳出
- mov al, [ds:esi] ; ┓
- inc esi ; ┃
- ; ┣ 逐字节移动
- mov byte [es:edi], al ; ┃
- inc edi ; ┛
- dec ecx ; 计数器减一
- jmp .1 ; 循环
- .2:
- mov eax, [ebp + 8] ; 返回值
- pop ecx
- pop edi
- pop esi
- mov esp, ebp
- pop ebp
- ret ; 函数结束,返回
- ; MemCpy 结束-------------------------------------------------------------
复制代码 |
|