PIMAGE_DOS_HEADER pImgDosHeaders = (PIMAGE_DOS_HEADER)module;
- 프로세스는 OS가 선택한 특정 메모리 주소에로드됩니다. 프로세스의
HMODULE
인스턴스 핸들은로드 주소와 같습니다. 그래서 이것은로드 주소의 시작 부분에 프로세스의 IMAGE_DOS_HEADER
구조체에 대한 포인터를 얻고 있습니다.
PIMAGE_NT_HEADERS pImgNTHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)pImgDosHeaders + pImgDosHeaders->e_lfanew);
e_lfanew
필드 는 프로세스의
IMAGE_NT_HEADERS
구조체 오프셋된다. 이 을 포인터로 입력하고
e_lfanew
바이트만큼 값을 증가시킨 다음 결과를
IMAGE_NT_HEADERS*
으로 입력 캐스트합니다.
위와
PIMAGE_IMPORT_DESCRIPTOR pImgImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)((LPBYTE)pImgDosHeaders + pImgNTHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
- 똑같은
.
DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress
은 프로세스의 Imports 테이블의 첫 번째
IMAGE_IMPORT_DESCRIPTOR
구조체에 대한 오프셋입니다.
pImgDosHeaders
이 해당 바이트만큼 증가되고
IMAGE_IMPORT_DESCRIPTOR*
으로 입력 캐스트됩니다.
for (IMAGE_IMPORT_DESCRIPTOR *iid = pImgImportDesc; iid->Name != NULL; iid++)
이 전체 수입량 테이블 통해 반복된다.
iid
은 테이블의 첫 번째 설명자를 가리키며 루프는
Name
이 할당되지 않은 설명자를 찾을 때까지 테이블을 통해 계속 진행되며 테이블의 끝을 나타냅니다.
은 자세한 내용은이 MSDN 문서를 읽기 :이 ** 경우
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format
그것은 다음에 갈 것이다 ** 세트를. 그래서 그것들은 모두 다 통과합니다. – rkapl
코드가 PE 헤더를 구문 분석하고 있습니다. 어느 곳에서나 후크가 없으며 어떤 스트레칭으로도 낮은 레벨이 아닙니다. 기본 C 구문에 대해 묻는 것은 스택 오버플로를 사용하기위한 것이 아닙니다. – IInspectable
입력 해 주셔서 감사합니다.하지만이 레벨이 낮지 않은 이유는 무엇입니까?나는 당신이 어셈블리와 비교하지 않는다면 PE 헤더를 꽤 낮은 레벨로 다루지 않는다는 것을 의미한다. (진정으로 묻고 있는데, 이것에 익숙하지 않다.) 미안 어떤 종류의 프로그래밍에서 내 배경의 대부분은 높은 수준의 자바/웹 개발, 나는 단지 이런 걸 다루는 교수형을 얻으려고했다. 나는 어떤 것들에 대한 기본적인 설명/문법을 다루는 여기에 많은 질문을 보았다. – JimmySmithJR