자동 압축 풀기 PE 파일의 작동 방식을 이해하려고합니다. 누군가 내 코드가 작동하지 않는 이유를 설명하거나 main() 부분을 고칠 수 있습니까?자동 압축 풀림 실행 파일 C++
#include <iostream>
#include <Windows.h>
using namespace std;
void ExtractResource(const HINSTANCE hInstance, WORD resourceID, const char* outputFilename);
int main()
{
HINSTANCE hInst = GetModuleHandle (0);
ExtractResource(hInst, 101, "101.dll");
ExtractResource(hInst, 102, "102.dll");
ExtractResource(hInst, 103, "103.dll");
ExtractResource(hInst, 104, "104.dll");
cout << "Files are now extracted!";
Sleep(INFINITE);
}
void ExtractResource(const HINSTANCE hInstance, WORD resourceID, const char* outputFilename){
// First find and load the required resource
HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceID), "BINARY");
if(hResource==NULL)
return;
HGLOBAL hFileResource = LoadResource(hInstance, hResource);
// Now open and map this to a disk file
LPVOID lpFile = LockResource(hFileResource);
DWORD dwSize = SizeofResource(hInstance, hResource);
// Open the file and filemap
HANDLE hFile = CreateFileA(outputFilename, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_NEW,
FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_READONLY, NULL);
HANDLE hFilemap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, NULL);
LPVOID lpBaseAddress = MapViewOfFile(hFilemap, FILE_MAP_WRITE, 0, 0, 0);
// Write the file
CopyMemory(lpBaseAddress, lpFile, dwSize);
// Unmap the file and close the handles
UnmapViewOfFile(lpBaseAddress);
CloseHandle(hFilemap);
CloseHandle(hFile);
}
리소스에 4 개의 dll 파일이 있지만이 파일을 사용하여 추출 할 수 없습니다. 리소스 ID가 정확해야하며 리소스 헤더에서 확인했습니다.
hInst
에 문제가 있습니까? 아니면 그 밖의 무엇이 잘못되었을 수 있습니까? 나는 누군가가 나를 도울 수 있기를 바란다. 나는 ~12 개월 전 CC++을 배우기 시작했다. 그래서 나를 용서해 준다.
"할 수 없음"을 정의하십시오. 정확히 어떤 API 호출이 정확히 어떤 오류로 실패합니까? 디버거를 사용하여 찾으십시오. –
괜찮 았지만 리소스를 추출하지 않습니다. VS2012를 사용하고 있습니다. – user2404495
그래서 프로그램을 디버깅하여 디버깅하십시오. –