Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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
C++ 有没有办法在运行时不停机地动态更新二进制文件(可执行文件)?_C++_C_Winapi_Assembly - Fatal编程技术网

C++ 有没有办法在运行时不停机地动态更新二进制文件(可执行文件)?

C++ 有没有办法在运行时不停机地动态更新二进制文件(可执行文件)?,c++,c,winapi,assembly,C++,C,Winapi,Assembly,假设我们在一年前用C++制作了一个程序,它是连续工作的,没有任何停止 在1年前,我们不知道有一天我们应该更新它(由于修复了一些bug)。所以我们没有对它执行任何(动态软件更新)指令。此外,它也不能在虚拟机中运行,因为虚拟机也允许我访问它的内存或上下文 现在,如何在不暂停和停止的情况下在其中进行更新(添加或删除某些函数、数据类型或指令) 有什么建议吗? 谢谢。您必须将调试器附加到它。在不会破坏任何东西的执行点停止,替换可执行映像,重新对齐指令指针,如果选择了错误的中断点,还必须重新对齐堆栈,修改可

假设我们在一年前用
C++
制作了一个程序,它是连续工作的,没有任何停止

在1年前,我们不知道有一天我们应该更新它(由于修复了一些bug)。所以我们没有对它执行任何(动态软件更新)指令。此外,它也不能在虚拟机中运行,因为虚拟机也允许我访问它的内存或上下文

现在,如何在不暂停和停止的情况下在其中进行更新(添加或删除某些函数、数据类型或指令)

有什么建议吗?
谢谢。

您必须将调试器附加到它。在不会破坏任何东西的执行点停止,替换可执行映像,重新对齐指令指针,如果选择了错误的中断点,还必须重新对齐堆栈,修改可能受新代码影响/添加的变量

这比你想要的麻烦多了


如果您的修改是本地的,那么最好使用代码洞作为这个特定运行实例的临时解决方案。

如果您使用插件,您可能可以以可控的方式卸载和重新加载它们。如果使用脚本,问题应该更小。要更新应用程序核心,您需要某种shell应用程序,它是稳定的,但应用程序核心是shell的插件。也许你可以动态更新。是的,但是我们软件的缺点是原子性。它没有核心层或外壳。所有代码都是在一个.exe文件中编译的,该文件提供了我们想要做的一切。可以使用调试函数(ReadProcessMemory、WriteProcessMemory等)检查/修改正在运行的进程内存。这种方法非常棘手,需要对汇编程序和windows背景有深入的了解。程序即使在100毫秒内也不能停止?你能提供更多关于你为什么不能做的信息吗?这个程序在做什么?如果它恰好是一个网络服务,只需安装一个并行服务,使用DNS重定向那里的客户端,等待prod实例上没有客户端,替换prod实例并返回DNS。服务不中断,除非它支持某种会话/cookie。它不在网络上运行。它是医疗用控制器的核心。我对你的答案投了赞成票,但我们一刻也不能阻止它!这对我们非常重要。调试器停止了我们不想做的程序。这似乎是一个非常有趣的情况。为什么您没有考虑更新系统?您可以创建另一个程序,启用调试器令牌权限来修改代码,但这将导致cpu缓存出现问题,其中可能包含正在修改的代码。我们评估的任何调试器解决方案都会导致程序停止或崩溃!我们正在考虑生成一个系统,该系统可以访问内存中的PE上下文并同时修改它。