получить значение регистра из контекста чужого процесса
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
получить значение регистра из контекста чужого процесса - 2011-11-12 18:28:11.843333
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
есть какой-то процесс, скажем, с висящим messagebox-ом. По заданию нужно из своей программы получить адрес PEB этого процесса (ну или TEB, не суть важно) под win7. Пытался получить значение регистра fs из контекста треда так (по сути это чистый пример из msdn):
void PE :: ReadProcMem(uBshort pid)
{
HANDLE proc;
CONTEXT ctx;
HANDLE hThreadSnap = INVALID_HANDLE_VALUE;
HANDLE hOpenedThread;
THREADENTRY32 te32;
// Take a snapshot of all running threads
hThreadSnap = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0);
if( hThreadSnap == INVALID_HANDLE_VALUE ) {
printf("\nThread enumeration failed!\n");
return;
}
// Fill in the size of the structure before using it.
te32.dwSize = sizeof(THREADENTRY32 );
// Retrieve information about the first thread,
// and exit if unsuccessful
if( !Thread32First( hThreadSnap, &te32 ) )
{
printf("\nThread32First failed!\n");
CloseHandle( hThreadSnap ); // Must clean up the snapshot object!
return;
}
do
{
if( te32.th32OwnerProcessID == pid )
{
_tprintf( TEXT("\n THREAD ID = 0x%08X"), te32.th32ThreadID );
_tprintf( TEXT("\n base priority = %d"), te32.tpBasePri );
_tprintf( TEXT("\n delta priority = %d"), te32.tpDeltaPri );
break;
}
} while( Thread32Next(hThreadSnap, &te32 ) );
[b]if ( (hOpenedThread = OpenThread(THREAD_ALL_ACCESS, TRUE, te32.th32ThreadID)) == NULL) {
printf("\nCan't open thread because of %d", GetLastError());
return;
}
ctx.ContextFlags = CONTEXT_ALL;
GetThreadContext(hOpenedThread, &ctx);
printf("\nFS: %#X", ctx.SegFs);[/b]
// Don't forget to clean up the snapshot object.
CloseHandle( hThreadSnap );
return;
} в итоге получается: FS: 0x3B понятно, что я ожидаю адрес TEB… почему такой адрес в FS? или я что-то не так делаю? и есть ли другие способы получить указатель на TEB?
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 16:38:00.976666
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
спасибо. а user mode вариантов никаких нету??
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 16:38:41.143333
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
А это usermode и есть
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 16:56:46.130000
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
как видно, я в этой теме слегка плаваю, хе-хе) поэтому глупый вопрос: я правильно понимаю, что нужно взять адрес ZwQueryInformationThread просто через GetProcAdress из ntdll?
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 17:01:24.246666
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
можно и так
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 17:07:43.903333
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
предположу, что еще есть реализация в каком-нибудь WDK? если нет, то как еще можно вызвать такого рода функцию?
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 17:09:43.900000
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
библиотеку то подключите к проекту и вызывайте как все остальные апи
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-13 17:20:19.480000
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
спасибо =) кстати, а почему в превом моем посте в fs такой адрес не знаете???
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-14 09:36:19.856666
|
|
|
Flint_ta
Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
|
Это не адрес, это значение сегментного регистра. подробнее про них: http://ru.osdev.wikia.com/wiki/%D0%A1%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B5_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D1%8B http://ru.wikipedia.org/wiki/X86
|
|
|
RE: получить значение регистра из контекста чужого процесса - 2011-11-14 17:44:58.476666
|
|
|
yurket
Сообщений: 69
Оценки: 0
Присоединился: 2009-05-04 23:47:54.993333
|
спасибо, со всем разобрался =) оказывается, в оле изначально не туда посморел - отсюда и проблемы…
|
|
|
|
|