今天终于用c和汇编成功调试出第一个程序了,程序很简单,我太菜了,花了几天的时间,才调试好,来记录一下,以防忘记了
先上程序:
#include "stdio.h"
int main()
{char *str="begin\n";
// printf("begin\n");__asm{push str ;将str的值就是字符串begin首地址压入栈call printf ;调用printf函数add esp,4 ;平衡栈数据}return 0;
}
程序的功能就是输出begin,代码解释写在程序中了
结果:
注意:
- 每个函数调用时,需要参数时,从栈顶取,根据参数的需要,依次往下取
比如说,输出两个参数:
#include "stdio.h"int main()
{printf("begin\n");char *str="a=%d,b=%d\n";__asm{push 3push 4call eeeeadd esp,8mov eax,3jmp endeeee: mov eax,[esp+8]mov ebx,[esp+4]xchg eax,ebxpush ebxpush eaxpush strcall printfadd esp,12retend: nop}return 0;
}
- 函数调用完需要平衡栈数据,上面程序中
mov esp,4
就是平衡栈数据
如果没有平衡会报错,如图: