Как указать на _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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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