从exe内的资源加载.BIN文件

时间:2018-09-18 07:41:49

标签: c++ visual-c++ resources

BIN文件到我的可执行文件的资源中,然后从资源而不是像argv这样的参数中加载它:“ loader.exe some.bin”我需要在exe中执行此操作而不将文件放在磁盘上,这是我当前使用的代码:

    LPSTR finalShellcode = NULL, data = NULL;
    DWORD finalSize, dataSize;
    DWORD dwOldProtect1 = 0;
    SYSTEM_INFO sysInfo;
    HMODULE test = LoadLibraryA("User32.dll");

    if (argc < 2) {
        return 0;
    }
    if (!GetFileContents(argv[1], &data, dataSize)) {
        return 0;
    }

    if (data[0] == 'M' && data[1] == 'Z') {
        if (!ConvertToShellcode(data, dataSize, HashFunctionName("SayHello"), "dave", 5, SRDI_CLEARHEADER, finalShellcode, finalSize)) {
            return 0;
        }

这是GetFileContents函数:

DWORD GetFileContents(LPCSTR filename, LPSTR *data, DWORD &size)
{
    std::FILE *fp = std::fopen(filename, "rb");

    if (fp)
    {
        fseek(fp, 0, SEEK_END);
        size = ftell(fp);
        fseek(fp, 0, SEEK_SET);

        *data = (LPSTR)malloc(size + 1);
        fread(*data, size, 1, fp);
        fclose(fp);
        return true;
    }
    return false;
}

我尝试使BIN文件像RC数据一样,但是没有解决方案,我不知道如何将.bin嵌入资源中,然后直接从资源中加载它。非常感谢 现在我将test.bin添加为RCDATA,名称为IDR_RCDATA1:

HMODULE hModule = GetModuleHandle(NULL); 
HRSRC hResource = FindResource(hModule, MAKEINTRESOURCE(IDR_RCDATA1), RT_RCDATA); // substitute RESOURCE_ID and RESOURCE_TYPE.
HGLOBAL hMemory = LoadResource(hModule, hResource);
DWORD dwSize = SizeofResource(hModule, hResource);
LPVOID lpAddress = LockResource(hMemory);
char *bytes = new char[dwSize];

但是我不知道ho如何使其正常工作...

A也显示为:How to load a custom binary resource in a VC++ static library as part of a dll?,但没有解决方法

0 个答案:

没有答案