| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | #define WIN32_LEAN_AND_MEAN#ifndef _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#endif#include <assert.h>#include <windows.h>#include <tchar.h>#include <stdio.h>#include <malloc.h>#include "../../MemoryModule.h"#define EXE_FILE TEXT("DllLoader.exe")int RunFromMemory(void){    FILE *fp;    unsigned char *data=NULL;    long size;    size_t read;    HMEMORYMODULE handle;    int result = -1;    fp = _tfopen(EXE_FILE, _T("rb"));    if (fp == NULL)    {        _tprintf(_T("Can't open executable \"%s\"."), EXE_FILE);        goto exit;    }    fseek(fp, 0, SEEK_END);    size = ftell(fp);    assert(size >= 0);    data = (unsigned char *)malloc(size);    assert(data != NULL);    fseek(fp, 0, SEEK_SET);    read = fread(data, 1, size, fp);    assert(read == static_cast<size_t>(size));    fclose(fp);    handle = MemoryLoadLibrary(data, size);    if (handle == NULL)    {        _tprintf(_T("Can't load library from memory.\n"));        goto exit;    }    result = MemoryCallEntryPoint(handle);    if (result < 0) {        _tprintf(_T("Could not execute entry point: %d\n"), result);    }    MemoryFreeLibrary(handle);exit:    free(data);    return result;}int main(){    return RunFromMemory();}
 |