안녕하십니까 동료 개발자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'? –
필자는 [여기] (http://www.rohitab.com/discuss/topic/31681-c-run-program-from-memory-and-not-file/) (Windows에서 분기)에 설명 된 방법을 시도했지만 절대로 시도하지 않았습니다. 성공했다. "From file only"실행의 문제점은 무엇입니까? 아무것도 아니지만 흥미로운 주제라고 생각합니다 ^^ – Jelly
실행 데이터가 매핑 된 경우 Windows에서 일반 파일로 간주해서는 안되며 따라서 "파일처럼"실행 가능합니까? – Jelly