Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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
是否可以添加一个getchar();相当于一个.o文件?_C_Assembly_X86 64_Getchar_Pause - Fatal编程技术网

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

是否可以添加一个getchar();相当于一个.o文件?,c,assembly,x86-64,getchar,pause,C,Assembly,X86 64,Getchar,Pause,不久前我创建了一个简单的C程序。这是一个简单的命令行生成器,它接受一些数字,打印结果并停止。我总是在编辑器的命令行环境中运行它,该环境在程序运行后自动暂停,因此我省略了在最后添加getchar() 我现在对此感到遗憾,因为我设法失去了来源。我现在拥有的只是编译好的.o和.exe文件,当然,后者在打印输出后立即退出,因此无法使用。它没有那么长,大约100行,但我想避免重写它。(而且,我甚至可以从这种方式中学到一些新东西。) 现在我对C语言有了非常基本的了解,对计算机级x86汇编的了解几乎为零(虽然

不久前我创建了一个简单的C程序。这是一个简单的命令行生成器,它接受一些数字,打印结果并停止。我总是在编辑器的命令行环境中运行它,该环境在程序运行后自动暂停,因此我省略了在最后添加
getchar()

我现在对此感到遗憾,因为我设法失去了来源。我现在拥有的只是编译好的.o和.exe文件,当然,后者在打印输出后立即退出,因此无法使用。它没有那么长,大约100行,但我想避免重写它。(而且,我甚至可以从这种方式中学到一些新东西。)

现在我对C语言有了非常基本的了解,对计算机级x86汇编的了解几乎为零(虽然我已经学习了微控制器8086汇编的基础知识,但我想现在不会有什么帮助),所以我有点被困在这里了。我可以在编译的代码中添加类似暂停功能的
getchar()
,还是有什么方法可以使.exe在退出之前停止,同时保持独立


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

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

我会编写一些批处理脚本,在其中调用你的程序,然后运行
pause
,等待你点击一个键,然后再继续

wrapper.bat:

yourprogram.exe
pause

当然,您可以将可执行文件反汇编成原始x86汇编代码,然后在Windows上查找简单的getchar()代码,添加该代码并重新组装。但是,重写程序可能会花费更少的时间,这取决于程序有多复杂,或者只是创建一个包装器批处理脚本。

您在哪个操作系统上编程?一般来说,这类事情很棘手,但可以使用二进制编辑器来完成。您是否考虑过将程序包装在批处理文件中,在运行程序后立即执行
pause
。但是它可以是任何东西。@fuz我在Windows10上(这就是为什么.exe)。包装也可以是一个答案,但我对汇编方式有点好奇。为了绕过终端限制,编辑命令行程序变得更糟糕的想法,对我来说是非常不愉快的。正确的解决方案是包装它,或者在终端中设置某种选项——我对Windows不太熟悉,不知道这是否可行。有一些建议您可能应该获得某种版本控制,这样您的源代码就安全了。Windows的内置终端窗口真的没有在程序退出后保持终端窗口打开的选项吗?这是一些其他终端仿真器所具有的一个非常基本的功能,并且显然广泛用于Windows终端的使用方式(为单个程序打开,而不是为返回文本shell的键入命令打开)。例如,在程序退出后保持窗口打开。