Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.79.70] |
|
Сообщ.
#1
,
|
|
|
Есть некий запущенный процесс app.exe, в нем есть некая нить work.dll, ProcessExplorer отображает её как work.dll+x01b010 (т.е. это как я понимаю её адрес).
Как засуспендить (не убить) именно эту нить с этим адресом, т.к. там еще есть например work.dll+x01b270 ? Причем по ThreadID не вариант, ибо от запуска к запуску app.exe TID этой нити естественно меняется. Можно получать TID нити по её адресу? Как это сделать? Я в С++ новичек, поэтому прошу дать хотя бы направление, дальше могу копать сам. |
Сообщ.
#2
,
|
|
|
Открыть процесс, перечислить в нем все треды, глянуть ентри поинт каждого треда, посмотреть какие ентрипоинты входят в пространство длл, засуспендить те треды.
CreateToolhelp32Snapshot + Thread32First / Thread32Next - перечисление тредов. Пример есть в мсдн NtQueryInformationThread - чтоб получить ентри поинт треда SuspendThread - чтоб засуспендить. Пространство длл получаем парся ПЕ заголовок загруженной длл. Адресс начала длл в памяти - это её хендл. |
Сообщ.
#3
,
|
|
|
Цитата Alexandoros @ Пространство длл получаем парся ПЕ заголовок загруженной длл. Адресс начала длл в памяти - это её хендл Парсить то зачем ? Достаточно через Module32First\Next определить базовый адрес dll |
Сообщ.
#4
,
|
|
|
И то правда. Там и адрес и размер есть.
|