如何将参数从C传递到汇编函数?
我试图在ubuntu 32位机器上编写一些汇编代码,使用write syscall打印字符串。 到目前为止,我的工作是: main.c文件:如何将参数从C传递到汇编函数?,c,assembly,x86,calling-convention,C,Assembly,X86,Calling Convention,我试图在ubuntu 32位机器上编写一些汇编代码,使用write syscall打印字符串。 到目前为止,我的工作是: main.c文件: extern int my_write(); int main(){ my_write(); return 0; } my_write.s文件: .globl my_write .type my_write, @function .section .data str: .ascii "this is my str
extern int my_write();
int main(){
my_write();
return 0;
}
my_write.s文件:
.globl my_write
.type my_write, @function
.section .data
str: .ascii "this is my string\n"
len: .quad . - str
.section .text
my_write:
mov $0x4, %eax # use the write syscall
mov $0x1, %ebx # write to standard output
mov $str, %ecx
mov $len, %edx
int $0x80 #trap
mov $0x1, %eax #exit syscall
mov $0x0, %ebx #exit status of 0
int $0x80 #trap
我使用以下命令编译了这些文件:
gcc-Wall main.c my_write.s-o main
它可以工作并打印“这是我的字符串”
但是字符串是在汇编中硬编码的。
我的问题是-如何从C文件传递我自己的字符串?
比如:
extern int my_write(char *str, int len);
int main(){
char str[] = "this is my string\n";
my_write(str, 18);
return 0;
}
,查找“用户界面:函数调用”。在32位代码中,参数被推到堆栈上返回地址之前,从右到左,因此您可以执行
mov4(%esp),%ecx;mov 8(%esp),%edx
。请记住,您正在编写32位asm,因此您必须使用-m32
编译您的C代码以匹配它,除非您使用的是较旧的32位系统,这是默认设置。谢谢!