Как я могу получить ограничения 32-битного стека / 32-битный TEB / TIB от существующего 32-битного процесса в Windows в режиме x64? - PullRequest
2 голосов
/ 21 ноября 2011

Обычно я бы просто обманывал и использовал NtQueryInformationThread для ThreadBasicInformation получить TebBaseAddress

но потоки wow64 имеют два стека, это только 64-битный тэб.

Ответы [ 3 ]

2 голосов
/ 21 ноября 2011

лучший способ, который я нашел, - это получить 32-битный контекст (не через GetThreadContext, а Wow64GetThreadContext) и использовать Wow64GetThreadSelectorEntry, чтобы получить адрес FS [0], а затем использовать ReadProcessMemory. Но самая большая проблема заключается в том, что для этого требуется Win7 / Windows2008 Server R2)

1 голос
/ 28 декабря 2012

Это более простой, хотя и недокументированный, метод: http://redplait.blogspot.ru/2012/12/teb32-of-wow64-process.html

1 голос
/ 07 февраля 2012

Используете ли вы интерфейс отладки Windows для подключения к процессу?Если это так, вы сможете использовать поле lpThreadLocalBase событий CREATE_THREAD_DEBUG_INFO и CREATE_PROCESS_DEBUG_INFO для получения базового адреса TEB при создании нового потока.

Но я думаю, что это работает только в том случае, если ваш отладчик контролирует процессот его создания.Это не поможет подключиться к существующему процессу.

...