0

我对汇编代码非常陌生,需要知道如何将命令行参数(argc、argv、env)作为函数参数传递。在第 2 行(#RIGHT HERE)是我不知道实现的地方,我需要将三个参数传递到我的 main.js 文件中。有人可以帮忙吗?

我通过运行编译它: gcc -m32 tc ss 下面的代码是 ss 和 mymain 在 tc

main:    
    #RIGHT HERE
    call   mymain
    ret
4

1 回答 1

1

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

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

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

于 2014-09-25T18:08:49.067 回答