是否可以添加getchar();相当于.o文件?

时间:2018-03-10 14:33:36

标签: c assembly x86-64 getchar pause

我刚才创建了一个简单的C程序。它是一个简单的命令行生成器,可以获取一些数字,打印结果并停止。我总是在编辑器的命令行环境中运行它,在程序运行后自动暂停,所以我省略了在末尾添加getchar()

我现在后悔这一点,因为我设法失去了源头。我现在拥有的只是编译的.o和.exe文件,后者 - 当然 - 在打印输出后立即退出,因此它无法使用。它不是那么长,大约100行,但我想避免重写它。 (另外,我甚至可能通过这种方式学到新东西。)

现在我已经掌握了非常基本的C知识,并且在计算机程度x86汇编方面几乎为零(尽管我已经学会了8086组装微控制器的基础知识,但现在我认为它不会有用),所以我是有点卡在这里。我可以将getchar()添加暂停功能添加到编译代码中,还是有任何方法可以让.exe在退出之前停止,同时仍保持独立状态?

该程序将在Windows 10系统上运行。

2 个答案:

答案 0 :(得分:7)

我会编写某种批处理脚本,您可以在其中调用程序,然后运行pause,等待您在继续之前按键。

wrapper.bat:

yourprogram.exe
pause

当然,您可以将可执行文件反汇编为原始x86汇编代码,然后在Windows上查找简单的getchar()代码,添加并重新组装。但是,重写程序可能会耗费更少的时间,具体取决于程序的复杂程度或仅创建包装程序批处理脚本。

答案 1 :(得分:1)

有可能劫持.o文件,你甚至可以使用.exe,.dll,...但这并不简单,需要大量的技术诀窍。我建议使用某种反编译器来尝试恢复原始源代码,进行更改并再次编译。您可以在old answer中找到反编译器的建议。