gpt4 book ai didi

c - 我的应用程序中的 ANSI C : how can I include and then extract . exe 文件(将 .exe 打包成 .exe)?

转载 作者:可可西里 更新时间:2023-11-01 10:07:37 33 4
gpt4 key购买 nike

我正在编写一个创建 Windows 服务的程序。所以我需要两个 .exe 文件——一个用于程序,创建服务,另一个用于服务本身。但是我想将这两个文件合二为一。我有以下想法 - 打开 .exe 文件,我想在文本编辑器中打包(服务应用程序),然后将其内容复制到某个字符串。然后我需要在所需目录中创建一个空的 .exe 文件并将字符串写入该文件。但我想这不是一个好主意。解决我的问题的最佳方法是什么?

提前致谢。

最佳答案

为了好玩,我写了一个使用您的方法的“启动器”程序。它有效,我使用 zoomin.exe 作为有效载荷对其进行了测试。

创建启动器可执行文件后,在 Notepad++ 中打开它和负载文件(在我的例子中是 zoomin.exe)和复制(使用编辑 | 选择性粘贴 | 复制二进制内容和粘贴二进制内容菜单选项)。

您可以通过在 Notepad++ 中搜索“File Goes Here”和“End”来找到负载在启动器文件中的位置。

请注意,我以任何方式推荐它,它很繁琐、容易出错,并且很容易因不同的编译器设置而崩溃。如前所述,我过去解决这个问题的方法是将负载作为资源添加,这样更易​​于维护。

#include <stdio.h>

#define SIZE_OF_ZOOMIN_EXE 11264
char buffer[SIZE_OF_ZOOMIN_EXE] = "File Goes Here";
char end_of_buffer[] = "End";

int main()
{
FILE *fp = fopen("myzoomin.exe", "wb");
fwrite(buffer, sizeof(buffer), 1, fp);
fclose(fp);
return 0;
}

这是我用 C++ 编写的自安装服务的 main() 函数。此外,该程序允许以交互方式运行服务。

int main( int argc, char *argv[] ) 
{
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{ SERVICE_NAME, Eng3ServiceStart },
{ NULL, NULL }
};

try {
if (argc >= 2) {
if (argc >= 3)
if (!(logfile = fopen(argv[2], "a")))
logfile = stdout;

if (0 == _stricmp(argv[1], "install")) {
DeleteEng3Service(); // ignore return value -- don't care if error
return CreateEng3Service();
}
else if (0 == _stricmp(argv[1], "uninstall"))
return DeleteEng3Service() ;

}

// not installing or uninstalling, start the service,
// passing it all the command-line arguments.
if (!StartServiceCtrlDispatcher( DispatchTable ) ) {
if (GetLastError() == ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) {
fprintf(logfile, "Failed to connect to service. Starting in console mode.\n");
return svcmain(argc, argv);
}
throw sys_ex();
}

} catch (exception& ex ) {
fprintf(logfile, ex.what());
}
}

关于c - 我的应用程序中的 ANSI C : how can I include and then extract . exe 文件(将 .exe 打包成 .exe)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12787245/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com