Assembler 中任意数量的参数(x86,att)
Arbitrary number of parameters in Assembler (x86, att)
我正在创建一个具有以下签名的函数:
int function_test (char *something, ...);
假设在 *something 上有一些东西可以让我知道传递了多少参数(就像 printf 对 '%' 所做的那样)。
所以我在%ebx
中存入当前参数号为4的倍数,从8开始,这样可以得到8(%ebp)
、12(%ebp)
等
如何获取该参数的内容?当我尝试时:
movl %ebx(%ebp),variable
我收到一个错误 (junk %ebp after register
)。
如何获取该参数的内容?增加其值的语法是什么?
movl (%ebp, %ebx), %eax
。请注意,您不能有两个内存引用,因此如果您想要在 variable
中使用,则必须分两步完成。要增加显然使用 inc
而不是 mov
.
我正在创建一个具有以下签名的函数:
int function_test (char *something, ...);
假设在 *something 上有一些东西可以让我知道传递了多少参数(就像 printf 对 '%' 所做的那样)。
所以我在%ebx
中存入当前参数号为4的倍数,从8开始,这样可以得到8(%ebp)
、12(%ebp)
等
如何获取该参数的内容?当我尝试时:
movl %ebx(%ebp),variable
我收到一个错误 (junk %ebp after register
)。
如何获取该参数的内容?增加其值的语法是什么?
movl (%ebp, %ebx), %eax
。请注意,您不能有两个内存引用,因此如果您想要在 variable
中使用,则必须分两步完成。要增加显然使用 inc
而不是 mov
.