Тема: FindWindow (С++)
Показать сообщение отдельно
Старый 13.05.2011, 09:23   #9
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
А как же ASLR? Там рандомный базовый адрес... Или тут автоматом это учитывается?
нет, ASLR тут не учитывается. Пока я отключил эту фигню в реестре и не парюсь.

Надо поискать как читать адрес с учетом этой ASLR.

Добавлено через 58 минут
Вот порыл в инете, пишут что BaseAddr определяется так :

Код:
#include <Windows.h>
#include <TlHelp32.h>


int _tmain(int argc, _TCHAR* argv[])
{
	MODULEENTRY32 me32;
	me32.dwSize = sizeof(MODULEENTRY32);

	DWORD pid = GetCurrentProcessId(); // тут подставить ИД процесса вов
	HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
	if (h != INVALID_HANDLE_VALUE)
	{
		if (Module32First(h, &me32))
		{
			// по идее нужно сделать проверку на имя модуля что бы me32.szModule было равно wow.exe
			// но обычно первым идет как раз сам основной экзешник
			DWORD baseaddr = (DWORD)me32.modBaseAddr;
			printf("0x%08X\n", baseaddr);
		}
	}
	return 0;
}

Проверить не могу, на работе Windows XP. Хотя на XP выдает положенные 0x00400000

Последний раз редактировалось Йоха; 13.05.2011 в 08:33.
Йоха вне форума   Ответить с цитированием