gpt4 book ai didi

c - 在 Windows 上执行映射文件

转载 作者:行者123 更新时间:2023-11-30 17:54:37 26 4
gpt4 key购买 nike

各位开发人员大家好,

我正在尝试在 Windows 上映射可执行二进制文件,然后执行映射的文件。

到目前为止,我使用 CreateFileMappingMapViewOfFile 管理映射。这些函数为我提供了映射文件的句柄和指向映射数据的指针,但我不知道如何执行映射的二进制文件。我认为我应该使用 CreateProcess 函数,但它应该作为参数给出什么?

char *binaryPath = "C:/MyExecutable.exe";

// Get the binary size
std::fstream stream(binaryPath, std::ios::in | std::ios::binary);
stream.seekg(0, std::ios::end);
unsigned int size = stream.tellg();

// Create a mapped file in the paging file system
HANDLE mappedFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_EXECUTE_READ, 0, size, NULL);

// Put the executable data into the mapped file
void* mappedData = MapViewOfFile(mappedFile, FILE_MAP_READ | FILE_MAP_EXECUTE, 0, 0, size);

stream.read((char*)mapping, size);
stream.close();

// What should I do now ?

最佳答案

没有本地方法可以运行驻留在内存中的原始可执行镜像。 CreateProcess() 是运行可执行镜像的官方方法,但镜像必须驻留在文件系统上。操作系统将镜像加载到内存中,然后根据需要对其进行修补(解析 DLL 引用等),以便它实际上可以正确运行。

话虽如此,我已经看到第三方代码在重复操作系统将可执行镜像加载到内存时所做的事情。但我只见过它与 DLL 一起使用(因此代码不必使用 LoadLibrary/Ex() 来使用内存中的 DLL),而不是与 EXE 一起使用。

关于c - 在 Windows 上执行映射文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14855467/

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