【发布时间】:2014-03-08 12:01:04
【问题描述】:
我是汇编初学者,我很想知道堆栈帧在这里的样子,所以我可以通过理解而不是算法来访问参数。
P.S.:汇编函数是process
#include <stdio.h>
# define MAX_LEN 120 // Maximal line size
extern int process(char*);
int main(void) {
char buf[MAX_LEN];
int str_len = 0;
printf("Enter a string:");
fgets(buf, MAX_LEN, stdin);
str_len = process(buf);
所以,我知道当我想访问 process 函数的参数时,我必须执行以下操作:
push ebp
mov ebp, esp ; now ebp is pointing to the same address as esp
pushad
mov ebx, dword [ebp+8]
现在我也希望有人纠正我认为正确的事情:
一开始esp是指向函数的返回地址,[esp+8]是它下面的栈中的槽,是函数的参数
由于函数进程只有一个参数,没有内部声明(不确定声明),那么堆栈帧从高到低,8字节为参数,8字节为返回地址。
谢谢。
【问题讨论】:
-
这对我来说似乎是正确的。