繁体   English   中英

使用system()从C程序调用NASM会产生不同的目标代码,然后使用Bash进行调用

[英]Calling NASM from a C program using system() produces different object code then calling using Bash

我已经实现了一个相当好的优化编译器(针对玩具语言),并且遇到了一个令人费解的场景。 我可以获取一个输入文件并从中生成程序集,因此在这方面,“编译器”已完成。 如果我使用该程序集文件与NASM进行组装,并使用G ++将其链接到我的运行时支持库(运行时需要libstdc ++),我将获得一个正常运行的可执行文件,并且没有任何错误。 但是,我希望能够用一个命令将其编译为可执行文件,因此我在编译器中添加了一些对system调用,传递了我在bash中使用的EXACT SAME COMMANDS。 当我运行编译器时,似乎可以正确地进行组装,但是链接步骤(再次使用g ++)失败,并且undefined reference to main 感到困惑,我尝试手动链接(不进行重新组装,因此我使用了NASM与system运行的目标文件,并收到了相同的错误。如果我使用新编译器的汇编输出进行重新组装,则没有问题,这导致了可以相信NASM是问题。就像我说的,这些命令是完全相同的(我确实是在第一次复制后才将它们粘贴并粘贴的),这是环境变量还是什么原因?

编辑:我手动组装了一个目标文件,再次使用与编译器中相同的命令,并且在两者之间做了vim diff。 编译器生成的似乎只包含ELF标头。

编辑2:差异的屏幕截图 截图

编辑3:我尝试使用system调用Perl脚本,而该脚本又将调用NASM和G ++,仍然没有运气。

修复! 这是由于竞争状况导致文件未刷新。 感谢您的所有帮助,不胜感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM