转储一个二进制exe到十六进制并嵌入到c++文件导致执行错误

Dump a binary exe to hexadecimal and embed it into c++ file leads to execution error

我正在使用 xxd 将 relec 恶意软件样本转储为十六进制,以将其嵌入到 c++ 文件中并使用 createprocess 执行它。当我得到十六进制 relec 文件时,我将它复制到一个数组并将其写入磁盘。我调用 createprocess 来执行 relec 可执行文件,但我收到以下错误消息:“该程序不能 运行 因为它与 64 位 Windows 版本不兼容...”。也许问题是使用 xxd 修改了恶意软件的内容。我也尝试过在线对话,但它未能显示相同的消息。如果使用 createprocess 调用原始 exe,它可以工作,但我需要将其嵌入。我使用 Linux 来使用 xxd 并在 windows 10 中使用生成的转储。我使用的 IDE 是 visual studio community 2019。这是代码:

unsigned char relec[] = {
  0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
  0xff, 0xff, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00...

void main(){

        FILE* f = fopen("relec", "w");
        fwrite(relec, sizeof(relec), 1, f);
        fclose(f);

        STARTUPINFOA si;
        PROCESS_INFORMATION pi;

        ZeroMemory(&si, sizeof(si));
        si.cb = sizeof(si);
        ZeroMemory(&pi, sizeof(pi));

        if (!CreateProcessA("relec",   // No module name (use command line)
            NULL,        // Command line
            NULL,           // Process handle not inheritable
            NULL,           // Thread handle not inheritable
            FALSE,          // Set handle inheritance to FALSE
            0,              // No creation flags
            NULL,           // Use parent's environment block
            NULL,           // Use parent's starting directory 
            &si,            // Pointer to STARTUPINFO structure
            &pi)           // Pointer to PROCESS_INFORMATION structure
            )
        {
            printf("CreateProcess failed (%d).\n", GetLastError());
            return;
        }

}

我更改了fopen写入模式。相反,我按照@TedLyngmo 的建议使用了写入二进制模式。谢谢大家的回答。