在c ++中编译exe文件

时间:2011-08-23 07:35:07

标签: c++

我想创建一个c ++程序,其中

  1. 我可以读取外部文件(可以是exe,dll,apk等等等)。即读取文件将它们转换为字节并将它们存储在数组

  2. 接下来,我想编译数组中的字节 现在这是我想要将字节编译成数组的棘手部分,只是为了检查字节是否正常工作

  3. 您可能会说我正在将文件转换为字节,然后将这些字节转换回同一个文件....(是的,我确实这样做了)
  4. 这可能吗?

2 个答案:

答案 0 :(得分:2)

测试是否可以加载可执行文件(与执行不完全相同):

  • 除非,否则会成功
    • 缺少权限
    • 该文件无法访问
    • 其中一个依赖项不可访问(依赖库,例如)

请注意,在UNIX上,使用dlopen

可以实现相同的目标

// A simple program that uses LoadLibrary

#include <windows.h> 
#include <stdio.h> 

int main( void ) 
{ 
    HINSTANCE hinstLib; 
    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; 

    // Get a handle to the DLL module.

    hinstLib = LoadLibrary(TEXT("input.exe"));  // or dll

    fFreeResult = FreeLibrary(hinstLib); 

if (hinstLib != NULL)
        printf("Message printed from executable\n"); 

    return 0;

}

另见

答案 1 :(得分:0)

使用流式复制

#include <sstream>
#include <fstream>

int main()
{
    std::stringstream in_memory(
            std::ios_base::out | 
            std::ios_base::in | 
            std::ios::binary);

    {   
        // reading whole file into memory
        std::ifstream ifs("input.exe", std::ios::in | std::ios::binary);
        in_memory << ifs.rdbuf();
    }

    {
        // optionally write it out
        std::ofstream ofs("input.exe.copy", std::ios::out | std::ios::binary);
        ofs << in_memory.rdbuf();
    }

    return 0;
}

如果你不使用内存中的阶段,它会更有效率(非常大的文件不会导致问题):

#include <sstream>
#include <fstream>

int main()
{
    std::ofstream("input.exe.copy2", std::ios::out | std::ios::binary)
        << std::ifstream("input.exe", std::ios::in | std::ios::binary).rdbuf();

    return 0;
}