我对汇编代码很新,需要知道如何在函数参数中传递命令行参数(argc,argv,env)。在第2行(#RIGHT HERE)是我不知道实现的地方,我需要将三个参数传递给我的main。有人可以帮忙吗?
我正在通过运行来编译它:gcc -m32 t.c ss.s.下面的代码是s.s,mymain是在t.c
main:
#RIGHT HERE
call mymain
ret
答案 0 :(得分:1)
您必须了解32位linux ABI(应用程序二进制接口),它描述了传递参数和堆栈使用的调用约定。我不会在此列出所有细节,但可以在网上轻松访问。
快速摘要:32位linux将需要在调用之前存储在堆栈中的参数。你需要足够的堆栈空间来存储参数,或者“推”它们,这将自动减少堆栈指针。在您的通话返回后,需要清理此空间。
如果您不想花时间研究ABI,一个简单的替代方法是编写一个C程序来调用传递所有参数的函数,然后简单地编译它并查看程序集以查看它是如何完成并复制。