Как указать на _TEB, не переопределяя его?C++

Программы на C++. Форум разработчиков
Anonymous
Как указать на _TEB, не переопределяя его?

Сообщение Anonymous »

Я работаю над обратным проектированием игры, которая использует указатель локального хранилища потока из NTCurrentTeb для инициализации указателя на игровой объект.
Вывод IDA выглядит следующим образом:< /p>

Код: Выделить всё

bool sub_51C3CC()
{
int v0; // eax
_BYTE *v1; // rdx

v0 = 0;
v1 = *(_BYTE **)(*(_QWORD *)NtCurrentTeb()->ThreadLocalStoragePointer + 568i64);
...
На данный момент я реализовал это как

Код: Выделить всё

#include 
#include 

bool AcademyWon()
{
int hasWon;
uint8_t *threadPointer;

hasWon = 0;
threadPointer = *(uint8_t **)(*(intptr_t *)NtCurrentTeb()->ThreadLocalStoragePointer + 568);
}
Приведенный выше код выдает ошибку «указатель или ссылка на неполный тип «_TEB» не разрешен», поскольку _TEB определен следующим образом в winnt.h:

Код: Выделить всё

struct _TEB *
NtCurrentTeb (
VOID
)

{
return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
}
Нужно ли мне полностью переопределить _TEB, чтобы он указывал на него? Или есть ли способ добиться того же результата, не прикасаясь к нему?


Подробнее здесь: https://stackoverflow.com/questions/785 ... efining-it

Вернуться в «C++»