MCPcopy Create free account
hub / github.com/Detanup01/gbe_fork / GetPayloadSectionFromModule

Function GetPayloadSectionFromModule

libs/detours/modules.cpp:698–760  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

696}
697
698static PDETOUR_LOADED_BINARY WINAPI GetPayloadSectionFromModule(HMODULE hModule)
699{
700 PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)hModule;
701 if (hModule == NULL) {
702 pDosHeader = (PIMAGE_DOS_HEADER)GetModuleHandleW(NULL);
703 }
704
705 __try {
706#pragma warning(suppress:6011) // GetModuleHandleW(NULL) never returns NULL.
707 if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE) {
708 SetLastError(ERROR_BAD_EXE_FORMAT);
709 return NULL;
710 }
711
712 PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((PBYTE)pDosHeader +
713 pDosHeader->e_lfanew);
714 if (pNtHeader->Signature != IMAGE_NT_SIGNATURE) {
715 SetLastError(ERROR_INVALID_EXE_SIGNATURE);
716 return NULL;
717 }
718 if (pNtHeader->FileHeader.SizeOfOptionalHeader == 0) {
719 SetLastError(ERROR_EXE_MARKED_INVALID);
720 return NULL;
721 }
722
723 PIMAGE_SECTION_HEADER pSectionHeaders
724 = (PIMAGE_SECTION_HEADER)((PBYTE)pNtHeader
725 + sizeof(pNtHeader->Signature)
726 + sizeof(pNtHeader->FileHeader)
727 + pNtHeader->FileHeader.SizeOfOptionalHeader);
728
729 for (DWORD n = 0; n < pNtHeader->FileHeader.NumberOfSections; n++) {
730 if (strcmp((PCHAR)pSectionHeaders[n].Name, ".detour") == 0) {
731 if (pSectionHeaders[n].VirtualAddress == 0 ||
732 pSectionHeaders[n].SizeOfRawData == 0) {
733
734 break;
735 }
736
737 PBYTE pbData = (PBYTE)pDosHeader + pSectionHeaders[n].VirtualAddress;
738 DETOUR_SECTION_HEADER *pHeader = (DETOUR_SECTION_HEADER *)pbData;
739 if (pHeader->cbHeaderSize < sizeof(DETOUR_SECTION_HEADER) ||
740 pHeader->nSignature != DETOUR_SECTION_HEADER_SIGNATURE) {
741
742 break;
743 }
744
745 if (pHeader->nDataOffset == 0) {
746 pHeader->nDataOffset = pHeader->cbHeaderSize;
747 }
748 SetLastError(NO_ERROR);
749 return (PBYTE)pHeader;
750 }
751 }
752 SetLastError(ERROR_EXE_MARKED_INVALID);
753 return NULL;
754 }
755 __except(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?

Callers 2

DetourGetSizeOfPayloadsFunction · 0.85
DetourFindPayloadFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected