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