Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 使用程序集将argc、argv、env传递给函数_Assembly_Argv_Env_Argc - Fatal编程技术网

Assembly 使用程序集将argc、argv、env传递给函数

Assembly 使用程序集将argc、argv、env传递给函数,assembly,argv,env,argc,Assembly,Argv,Env,Argc,我对汇编代码非常陌生,需要知道如何将命令行参数(argc、argv、env)作为函数参数传入。第2行(#就在这里)是我不知道实现的地方,我需要将这三个参数传递到我的main中。有人能帮忙吗 我通过运行:gcc-m32 t.c s.s来编译它。下面的代码是s.s,mymain是t.c main: #RIGHT HERE call mymain ret 您必须了解32位linux ABI(应用程序二进制接口),它描述了传递参数和堆栈使用的调用约定。我不打算在这里

我对汇编代码非常陌生,需要知道如何将命令行参数(argc、argv、env)作为函数参数传入。第2行(#就在这里)是我不知道实现的地方,我需要将这三个参数传递到我的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程序,调用一个传递所有参数的函数,然后简单地编译它,查看程序集,看看它是如何完成的,然后复制