- 论坛徽章:
- 0
|
如下程序:
== 汇编 test.asm =======================
extern abc ; int abc(int a, int b)
[section .data]
param1 dd 1
param2 dd 2
[section .text]
global _start
global printaa
_start:
push param2
push param1
call abc
add esp, 4
mov ebx, 0
mov ebx, 1 ; sys_exit
int 0x80 ; 系统调用
printaa:
mov edx, [esp + 8] ; len
mov ecx, [esp + 4] ; msg
mov ebx, 1
mov eax, 4 ; sys_write
int 0x80 ; 系统调用
ret
== C 程序: ltt.c ================
void printaa( char *msg, int len);
int abc (int a, int b)
{
if (a>b)
printaa("a");
else
printaa("b");
}
对于 test.asm :
1、 _start 后面的红色语句 “add esp, 4” ,指向函数abc的第一个参数
2、printaa中蓝色部分“mov ecx, [esp + 4]”,指向函数printaa 中的第一个参数
请教各位:
那对于1和2, dword [esp + 0] 里面都有些什么?(是 eip 还是 “cs 和 ip ”)?
另:我曾在windows下debug过,但由于程序是用nasm编译的,并不能追踪到代码(感觉以前跟用masm编译、再用debug调试的不一样),不知道是否是我的调试有问题。 |
|