Что нового

[Процессы] Получение адреса модуля в 32-х битном процессе

newcomere

Новичок
Сообщения
11
Репутация
0
Есть процесс a.exe, он 32-х битный, есть скрипт скомпилированный в 32 и 64 версиях.
При получении адреса модуля a.dll, в процессе a.exe, при помощи 32-х битного скрипта адрес dll успешно определяется.
При получении адреса модуля a.dll, в процессе a.exe, при помощи 64-х битного скрипта адрес dll не определяется.
Для поиска адреса использую функцию _MemoryModuleGetBaseAddress из NomadMemory.au3.
Как получить адрес модуля в 32-х битном приложении при помощи 64-битного скрипта?
 
Автор
N

newcomere

Новичок
Сообщения
11
Репутация
0
Решил свою проблему так:
Код:
Func GETGAMEBASEADDRESS($PID, $sModule)

	$HSNAP = DllCall("Kernel32.dll", "HANDLE", "CreateToolhelp32Snapshot", "DWORD", 0x00000018, "DWORD", $PID)

	$STMODULE = DllStructCreate("DWORD dwSize;DWORD th32ModuleID;DWORD th32ProcessID;" & _
	"DWORD GlblcntUsage;DWORD ProccntUsage;ptr modBaseAddr;" & _
	"DWORD modBaseSize;HANDLE hModule;WCHAR szModule[256];" & _
	"WCHAR szExePath[260]")

	DllStructSetData($STMODULE, "dwSize", DllStructGetSize($STMODULE))

	$RET = DllCall("Kernel32.dll", "BOOLEAN", "Module32FirstW", "HANDLE", $HSNAP[0], "ptr", DllStructGetPtr($STMODULE))

	IF ($RET[0] = False) Then
		DllCall("Kernel32.dll", "BOOLEAN", "CloseHandle", "HANDLE", $HSNAP[0])
		Return 0
	Else
		$RET[0] = True
		Do
			If DllStructGetData($STMODULE, "szModule") = $sModule Then

				DllCall("Kernel32.dll", "BOOLEAN", "CloseHandle", "HANDLE", $HSNAP[0])

				Return DllStructGetData($STMODULE, "modBaseAddr")
			EndIf
			$RET = DllCall("Kernel32.dll", "BOOLEAN", "Module32NextW", "HANDLE", $HSNAP[0], "ptr", DllStructGetPtr($STMODULE))
		Until $RET[0] = False
	EndIf
EndFunc   ;==>GETGAMEBASEADDRESS
 
Верх