Список страниц памяти процесса

Тема в разделе "WASM.WIN32", создана пользователем XshStasX, 31 дек 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Как узнать все адресса страниц, которые выделелись в процессе во время его работы ?
    Я так понимаю только такой вариант возможен:
    GetSystemInfo + перебор адресов страниц + VirtualQueryЕх ?
     
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да...
     
  3. CyberManiac

    CyberManiac New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2003
    Сообщения:
    2.473
    Адрес:
    Russia
    Можно ещё в какой-нибудь байт на каждой странице чтением тыкаться, но это вряд ли будет лучше.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    CyberManiac
    бред) очень рекомендую тебе промолчать, если нечего сказать. устал читать твой бред по всему форуму
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    [​IMG]
     
  6. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Сделал такой код:
    Код (Text):
    1. function ScanVirtualMemory(pid:THandle):PChar;
    2. var
    3.  PageSize:DWORD;
    4.  PageStart,PageEnd,p:PChar;
    5.  SysInfo:SYSTEM_INFO;
    6.  MemInfo:MEMORY_BASIC_INFORMATION;
    7. begin
    8. Result:=nil;
    9.  pid:=OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ,false,pid);
    10.  if pid = 0 then begin
    11.   // error
    12.   exit;
    13.  end;
    14.  GetSystemInfo(SysInfo);
    15.  PageStart:=SysInfo.lpMinimumApplicationAddress;
    16.  PageEnd:=SysInfo.lpMaximumApplicationAddress;
    17.  PageSize:=SysInfo.dwPageSize;
    18.  
    19.  while PageStart < PageEnd do
    20.  begin
    21.   if(VirtualQueryEx(pid,PageStart,MemInfo,sizeof(MemInfo))<>0 ) then begin
    22.    writeln(IntToHex(cardinal(MemInfo.BaseAddress),8),#13#10);
    23.   end;
    24.   inc(PageStart,PageSize);
    25.  end;
    26.  
    27. CloseHandle(pid);
    28. end;
    29. var
    30.  pid:THandle;
    31.  str:string;
    32.  
    33. begin
    34.   writeln('pid:');
    35.   VirtualAlloc(0,3,MEM_COMMIT,PAGE_READWRITE);
    36.   pid := GetCurrentProcessId();
    37.  // readln(pid);
    38.   writeln('string:');
    39. //  readln(str);
    40.   ScanVirtualMemory(pid);
    41.   readln;
    42. end.
    Но что то он не показывает ту память которая была веделена через VirtualAlloc(0,3,MEM_COMMIT,PAGE_READWRITE);
     
  7. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    забыл добавить PROCESS_QUERY_INFORMATION
     
  8. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    это типа как vmmap от Sysinternals? Если да, то у Рихтера был пример в его книге он идет на диске: 14-VMMap