From bc35349e0fd13a9eea0dddad8cf5d9957844c76e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Tamio=C5=82=C5=82o?= Date: Wed, 9 Jul 2025 00:21:07 +0200 Subject: [PATCH] PEF - fix export count calculation (#418) * Initial version of PEF * add pef test file * Fixed export hash slot count calculation --------- Co-authored-by: paxcut <53811119+paxcut@users.noreply.github.com> --- patterns/pef.hexpat | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/patterns/pef.hexpat b/patterns/pef.hexpat index 6d2b27d..73e9614 100644 --- a/patterns/pef.hexpat +++ b/patterns/pef.hexpat @@ -1,11 +1,11 @@ -#pragma author Dominik Tamiollo +#pragma author domin568 #pragma description Preffered Executable Format executable (for Mac OS 7.1.2 - Mac OS 10.4 / BeOS) #pragma endian big #pragma pattern_limit 1000000 -#pragma magic [4A 6F 79 21] @ 0x00 import std.core; import std.sys; +import std.math; struct PEFContainerHeader { @@ -435,7 +435,7 @@ u32 relocBegin = loaderOffset + loaderHeader.relocInstrOffset; u32 relocSize = loaderOffset + loaderHeader.loaderStringsOffset - relocBegin; RelocInstruction relocationInstructions[while(($-relocBegin) < relocSize)] @ relocBegin; -u32 exportSlotNum = 2 * loaderHeader.exportHashTablePower; // 2 ^ loaderHeader.exportHashTablePower +u32 exportSlotNum = std::math::pow(2, loaderHeader.exportHashTablePower); u32 exportDataOffset = loaderOffset + loaderHeader.exportHashOffset; u32 exportSymbolKeysOffset = exportDataOffset + sizeof(PEFExportedSymbolHashSlot) * exportSlotNum; u32 exportedSymbolsOffset = exportSymbolKeysOffset + sizeof(PEFExportedSymbolKey) * loaderHeader.exportedSymbolCount;