2014-09-25 71 views
0

我对汇编代码非常陌生,需要知道如何在函数参数中传递命令行参数(argc,argv,env)。在第2行(#RIGHT HERE)是我不知道实现的地方,我需要将这三个参数传递给我的主体。任何人都可以帮忙吗?通过argc,argv,env来使用汇编函数

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

main:  
    #RIGHT HERE 
    call mymain 
    ret 

回答

1

你必须要了解32位的Linux ABI(应用程序二进制接口),它描述了传递参数和堆栈使用的调用约定。我不打算列出这里的所有细节,但可以通过网络轻松访问。

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

如果你不想花时间研究ABI,一个简单的选择是编写一个C程序,调用一个传入所有参数的函数,然后简单地编译它并查看程序集以了解它是如何实现的完成后,复制。