-1
您好開發夥伴,在Windows上執行映射文件
我想映射Windows上的可執行二進制文件,然後執行映射文件。
到目前爲止,我管理映射使用CreateFileMapping
和MapViewOfFile
。 這些函數給了我一個處理映射文件和指向映射數據的指針,但我不知道如何執行映射的二進制文件。 我想我應該使用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'? – 2013-02-13 14:14:56
我嘗試了[這裏](http://www.rohitab.com/discuss/topic/31681-c-run-program-from-memory-and-not-file/)描述的方法(在Windows上分叉),但從不遇到成功。 「僅從文件」執行有什麼問題?沒有什麼,但我覺得它是一個有趣的主題^^ – Jelly 2013-02-13 14:18:28
如果可執行數據被映射,不應該被視爲Windows的常規文件,因此可執行「像一個文件」? – Jelly 2013-02-13 14:22:39