Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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/0/windows/14.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++_Windows_Runtime_Storage_Executable - Fatal编程技术网

C++ 是否可以在运行时修改可执行文件?

C++ 是否可以在运行时修改可执行文件?,c++,windows,runtime,storage,executable,C++,Windows,Runtime,Storage,Executable,是否可以在运行时修改可执行文件(我问的是Windows XP/Vista/7/Server)?我刚刚评估过。它可以创建所谓的“托管可执行存储文件”,在运行时自行修改这些文件。。。这种存储文件类似于标准的自解压归档文件(数据附加到可执行模块),但主要区别在于,您可以在不使用主程序的情况下查看和修改其内容。怎么可能呢?我的项目(C++)中需要类似的功能:我希望能够创建可执行文件来修改附加到它的数据。是-一种常见的技术是在可执行文件的末尾附加数据文件 典型的方案是将0x00000000整数写入可执行文

是否可以在运行时修改可执行文件(我问的是Windows XP/Vista/7/Server)?我刚刚评估过。它可以创建所谓的“托管可执行存储文件”,在运行时自行修改这些文件。。。这种存储文件类似于标准的自解压归档文件(数据附加到可执行模块),但主要区别在于,您可以在不使用主程序的情况下查看和修改其内容。怎么可能呢?我的项目(C++)中需要类似的功能:我希望能够创建可执行文件来修改附加到它的数据。

是-一种常见的技术是在可执行文件的末尾附加数据文件

典型的方案是将0x00000000整数写入可执行文件的末尾,然后追加每个文件,后跟其大小(以字节为单位)


然后,当可执行文件需要读取数据时,它会检查自己文件中的最后4个字节,将其用作文件长度,并从自己的文件中复制该字节数,然后将接下来的4个字节检查为另一个长度,并将其复制为文件,直到其长度为0000。如果您还需要对文件名进行编码—这增加了一点复杂性,但基本上是相同的想法。

是—一种常见的技术是在可执行文件的末尾附加数据文件

典型的方案是将0x00000000整数写入可执行文件的末尾,然后追加每个文件,后跟其大小(以字节为单位)


然后,当可执行文件需要读取数据时,它会检查自己文件中的最后4个字节,将其用作文件长度,并从自己的文件中复制该字节数,然后将接下来的4个字节检查为另一个长度,并将其复制为文件,直到其长度为0000。如果您还需要对文件名进行编码-这增加了一点复杂性,但基本上是相同的想法。

您可以将TOC指针附加到EXE(可能还有一个神奇的ID cookie),以便验证它是否是TOC指针,然后使用它备份到每个附加记录的开头

只要不弄乱文件的头和主要内容,操作系统应该仍然可以加载它

然而,您牺牲了您的EXE所拥有的任何签名-并且您可能有各种权限问题需要解决

我已经为我的开发环境编写了一些工具,这些工具可以打开一个Windows EXE,推断其中的资源,修改各种资源,并重新打包整个过程。我们使用它将测试版标记为发行版(因此它会修改版本记录)


如果知道EXE文件的结构并正确重建它,您可以对其执行任何操作。

您可以将TOC指针附加到EXE(可能还有一个神奇的ID cookie),以便验证它是否是TOC指针,然后使用它备份到每个附加记录的开头

只要不弄乱文件的头和主要内容,操作系统应该仍然可以加载它

然而,您牺牲了您的EXE所拥有的任何签名-并且您可能有各种权限问题需要解决

我已经为我的开发环境编写了一些工具,这些工具可以打开一个Windows EXE,推断其中的资源,修改各种资源,并重新打包整个过程。我们使用它将测试版标记为发行版(因此它会修改版本记录)


如果你知道它的结构并正确地重建它,你可以做任何你想要的EXE文件。

,因为这被标记为<代码> Windows < /C> >,你也可以考虑“替代数据流”。这使您可以将单个文件几乎视为一个目录。您可以将名为

Program.EXE:ExtraData
的流添加到您的程序中,并使用正常的文件函数写入该流


再次,您的可执行文件很可能将在程序文件\/COD>中,对于正常(非提升)用户来说,这是不可写入的。

,因为这被标记为“代码> Windows < /代码>,您也可以考虑“替代数据流”。这使您可以将单个文件几乎视为一个目录。您可以将名为

Program.EXE:ExtraData
的流添加到您的程序中,并使用正常的文件函数写入该流


同样,您的可执行文件很可能位于
程序文件\
,对于普通(非升级)用户来说,这是不可写的。

如果您真正想问的是SmartUtils便携式存储的神奇之处,那么我建议它是一个自动执行的zip存档。归档文件的EXE(与WinZip或7-Zip创建一样)自动从临时文件夹提取并执行应用程序EXE,并提供一个API,该API可归结为提取、操作和修改原始自动执行归档文件的方法

因此Windows从不试图修改正在运行的.exe。相反,您的.exe(temp file extracted&run)是正在执行的(以及绑定到它的库),它操纵着源.exe(实际上是一个自动执行的归档文件,可能是.zip)

下次用户“运行”修改后的“exe”时,将再次提取并运行您的.exe,并且它可以再次操作自解压的.exe

我希望这对你有意义


这只是一个最好的猜测

如果您真正想问的是SmartUtils便携式存储的神奇之处,那么我建议它是一个自动执行的zip存档。归档文件的EXE(与WinZip或7-Zip创建一样)自动从临时文件夹提取并执行应用程序EXE,并提供一个API,该API可归结为提取、操作和修改原始自动执行归档文件的方法

因此Windows从不试图修改正在运行的.exe。相反,您的.exe(temp file extracted&run)是正在执行的(以及绑定到它的库),它操纵着源.exe(实际上是一个自动执行的归档文件,可能是.zip)

下次用户“运行”修改后的“exe”时,将再次提取并运行您的.exe,并且它可以再次操作自解压的.exe

我希望这是有道理的