Что нового

Поиск адресов модулей процесса

rybik

Новичок
Сообщения
84
Репутация
0
Помогите переписать функцию на autoit или предложите аналог. Нужно для 64 битной программы.
Код:
DWORD64 ListProcessModules(DWORD dwPID)
{
    HANDLE hModuleSnap = INVALID_HANDLE_VALUE;
    MODULEENTRY32 me32;

    hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
    if (hModuleSnap == INVALID_HANDLE_VALUE)
        return FALSE;

    me32.dwSize = sizeof(MODULEENTRY32);

    if (!Module32First(hModuleSnap, &me32))
    {
        CloseHandle(hModuleSnap);
        return FALSE;
    }
    
    do
    {
        if (strcmp(me32.szModule, "Process.exe") == 0) {
            return (DWORD64)me32.modBaseAddr;
        }
    } while (Module32Next(hModuleSnap, &me32));

    CloseHandle(hModuleSnap);
    return 0;
}
 

Andrey_A

Продвинутый
Сообщения
325
Репутация
68
Возможно так:
Код:
#include <Array.au3>

$iPid=ProcessExists('Totalcmd.exe')
$aAdres=_GetBaseAddress($iPid)
_ArrayDisplay($aAdres)

Func _GetBaseAddress($iPid)
  Local $hSnap=DllCall('Kernel32.dll','handle','CreateToolhelp32Snapshot','dword',8,'dword',$iPid)
  Local $tagSTMODULE = DllStructCreate("dword dwSize;dword th32ModuleID;dword th32ProcessID;dword GlblcntUsage;dword ProccntUsage;ptr modBaseAddr;dword modBaseSize;handle hModule;wchar szModule[256];wchar szExePath[260]")
  DllStructSetData($tagSTMODULE,'dwSize',DllStructGetSize($tagSTMODULE))
  Local $aRet=DllCall('Kernel32.dll','boolean','Module32FirstW','handle',$hSnap[0],'ptr',DllStructGetPtr($tagSTMODULE))
  If False=$aRet[0]Then Return DllCall('Kernel32.dll','boolean','CloseHandle','handle',$hSnap[0])
  Local $aRes[9999][2],$n=0
  $aRet[0]=True
  Do
    $n+=1
    $aRes[$n][0]=DllStructGetData($tagSTMODULE,'szModule')
    $aRes[$n][1]=DllStructGetData($tagSTMODULE,'modBaseAddr')
    $aRet=DllCall('Kernel32.dll','boolean','Module32NextW','handle',$hSnap[0],'ptr',DllStructGetPtr($tagSTMODULE))
  Until $aRet[0]=False
  ReDim $aRes[$n+1][2]
  $aRes[0][0]=$n
  DllCall('Kernel32.dll','boolean','CloseHandle','handle',$hSnap[0])
  Return $aRes
EndFunc

Тоже самое делает и
Код:
#include <Array.au3>
#include <WinAPIProc.au3>

$iPid=ProcessExists('Totalcmd.exe')
$aAdres=_WinAPI_EnumProcessModules($iPid)
_ArrayDisplay($aAdres)
 
Последнее редактирование:
Верх