Add method for obtaining PEB

Inline method for obtaining process environment block.
This commit is contained in:
Kawe Mazidjatari 2023-07-02 22:02:31 +02:00
parent 892fd19c4a
commit a0419eec11
3 changed files with 6 additions and 5 deletions

View File

@ -112,7 +112,7 @@ BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
case DLL_PROCESS_ATTACH:
{
s_ProcessEnvironmentBlock = (PEB64*)__readgsqword(0x60);
s_ProcessEnvironmentBlock = CModule::GetProcessEnvironmentBlock();
s_DosHeader = (IMAGE_DOS_HEADER*)s_ProcessEnvironmentBlock->ImageBaseAddress;
s_NtHeaders = (IMAGE_NT_HEADERS64*)((uintptr_t)s_DosHeader
+ (uintptr_t)s_DosHeader->e_lfanew);

View File

@ -58,6 +58,10 @@ public:
inline static IMAGE_NT_HEADERS64* GetNTHeaders(QWORD pModuleBase)
{ return reinterpret_cast<IMAGE_NT_HEADERS64*>(pModuleBase + GetDOSHeader(pModuleBase)->e_lfanew); }
// https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
inline static PEB64* GetProcessEnvironmentBlock()
{ return reinterpret_cast<PEB64*>(__readgsqword(0x60)); }
void UnlinkFromPEB(void) const;
private:

View File

@ -18,10 +18,7 @@ static void InitAllocator()
if (!s_bAllocatorInitialized)
{
s_bAllocatorInitialized = true;
// https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
const PEB64* processEnvBlock = reinterpret_cast<PEB64*>(__readgsqword(0x60));
const QWORD imageBase = processEnvBlock->ImageBaseAddress;
const QWORD imageBase = CModule::GetProcessEnvironmentBlock()->ImageBaseAddress;
CreateGlobalMemAlloc = CModule::GetExportedSymbol(imageBase,
"CreateGlobalMemAlloc").RCast<CStdMemAlloc* (*)(void)>();