将argc,argv,env传递给使用程序集的函数

时间:2014-09-25 16:31:14

标签: assembly argv env argc

我对汇编代码很新,需要知道如何在函数参数中传递命令行参数(argc,argv,env)。在第2行(#RIGHT HERE)是我不知道实现的地方,我需要将三个参数传递给我的main。有人可以帮忙吗?

我正在通过运行来编译它:gcc -m32 t.c ss.s.下面的代码是s.s,mymain是在t.c

main:    
    #RIGHT HERE
    call   mymain
    ret

1 个答案:

答案 0 :(得分:1)

您必须了解32位linux ABI(应用程序二进制接口),它描述了传递参数和堆栈使用的调用约定。我不会在此列出所有细节,但可以在网上轻松访问。

快速摘要:32位linux将需要在调用之前存储在堆栈中的参数。你需要足够的堆栈空间来存储参数,或者“推”它们,这将自动减少堆栈指针。在您的通话返回后,需要清理此空间。

如果您不想花时间研究ABI,一个简单的替代方法是编写一个C程序来调用传递所有参数的函数,然后简单地编译它并查看程序集以查看它是如何完成并复制。