Skip to content

Commit 4ae15d8

Browse files
committed
Search by 4 bytes
1 parent 36a4377 commit 4ae15d8

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

MemoryModule/MmpLdrpTls.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,17 +118,19 @@ static NTSTATUS NTAPI RtlFindLdrpHandleTlsData10() {
118118
return STATUS_NOT_SUPPORTED;
119119

120120
// C_SCOPE_TABLE$$Begin
121-
LPBYTE LdrpHandleTlsDataBlock = *(LPDWORD)(SearchContext.Result - 8) + LPBYTE(DllBase);
122-
LPBYTE LdrpHandleTlsDataBlockBackup = LdrpHandleTlsDataBlock;
121+
LPDWORD LdrpHandleTlsBlock = LPDWORD(*(LPDWORD)(SearchContext.Result - 8) + LPBYTE(DllBase));
122+
// Pad to 0x04
123+
LdrpHandleTlsBlock = LPDWORD(LONGLONG(LdrpHandleTlsBlock) / 0x04 * 0x04);
124+
LPDWORD LdrpHandleTlsBlockBackup = LdrpHandleTlsBlock;
123125

124126
// Search back for LdrpHandleTls
125-
// Search up for 0xCC, and make sure it's not false positive by checking alignment (0x4)
126-
while (*LdrpHandleTlsDataBlock != 0xcc || (((LONGLONG)LdrpHandleTlsDataBlock + 1) % 0x4) != 0) {
127+
// Search up for 4 consecutive 0xCC
128+
while (*LdrpHandleTlsBlock != 0xcccccccc) {
127129
// Normally ~0x140 bytes
128-
if (LdrpHandleTlsDataBlockBackup - LdrpHandleTlsDataBlock > 0x400) return STATUS_NOT_SUPPORTED;
129-
LdrpHandleTlsDataBlock--;
130+
if (LdrpHandleTlsBlockBackup - LdrpHandleTlsBlock > 0x400) return STATUS_NOT_SUPPORTED;
131+
LdrpHandleTlsBlock--;
130132
}
131-
LdrpHandleTlsDataBlock++;
133+
LdrpHandleTlsBlock++;
132134
LdrpHandleTlsData = LdrpHandleTlsDataBlock;
133135
return STATUS_SUCCESS;
134136
#else

0 commit comments

Comments
 (0)