Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Все переменные приложения


Автор: Budy 26.2.2006, 09:25
:Приветствую
Знаю, вопрос немного по теме хакерства или еще там чего, но меня интерисует вопрос чисто из любопытства, всегда хотел так сказать наглядно увидеть какие и сколько же используется в приложении переменных, констант, типов, массивов, че там еще то есть.

Желательно если получить их виндосные ID и их значения и еще если можно имена (как то Count: integer или вроде тогоsmile)
Заранее всех благодарю за участие

Автор: Guedda 26.2.2006, 09:27
Берешь код, и смотришь, там слева такая вкладка, там все типы, процедуры описаны.

Автор: Budy 26.2.2006, 09:36
Guedda, немного нето, я имел ввиду уже готовую программу, запущенный процесс

Автор: Rrader 26.2.2006, 09:49
Цитата

как то Count: integer

Это невозможно

Автор: Budy 26.2.2006, 09:54
Rrader, а можно хотя бы ID виндосные и текущие значения?

Автор: Snowy 26.2.2006, 10:29
У переменных нет виндозных ID - это ведь всего адреса в памяти.
Можно просканировать память чужого процесса, как это делает ArtMoney.
Но разбирать, что там за переменная и какого она типа уже отдельная тема.

Автор: Budy 26.2.2006, 11:14
Snowy, гуд, то что надо, осталось только
Цитата
просканировать память чужого процесса
и разобрать
Цитата
что там за переменная и какого она типа

Автор: Snowy 26.2.2006, 11:58
Поиск по ReadProcessMemory тебе в руки.

Автор: Budy 1.3.2006, 08:47
Snowy, я бы не отказался от примера smile

Автор: CaNIBaLchik 1.3.2006, 11:04
а не легче не грузить память такими извратами?

Автор: Budy 1.3.2006, 11:35
CaNIBaLchik, а что, могут быть осложнения? Или ты в плане чего?

Автор: Snowy 1.3.2006, 13:21
Ну вот пример. Скидывает в файл дамп памяти процесса.
В примере скидываю дамп текущего процесса. Но можно любого, зная его ID.
Код
program Project1;

uses
  Windows, Messages, Classes;

procedure DumpMemory(ProcessID: dword);
var
  hProcess: THandle;
  Mbi:      TMemoryBasicInformation;
  Buf:      PByte;
  adr, r:   dword;
  fs:       TFileStream;
begin
  adr := 0; r := 0;
  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ or
                          PROCESS_VM_OPERATION, false, ProcessID);
  if hProcess <> 0 then
  begin
    try
      fs := TFileStream.Create('C:\dump.mmr', fmCreate);
    except fs := nil; end;
    while VirtualQueryEx(hProcess, pointer(Adr), Mbi, SizeOf(Mbi)) <> 0 do
    begin
      if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then
      begin
        GetMem(Buf, Mbi.RegionSize);
        try
          if ReadProcessMemory(hProcess, Mbi.BaseAddress, Buf, Mbi.RegionSize, r) then
            if fs <> nil then fs.Write(Buf^, r);
        finally
          FreeMem(Buf);
        end;
      end;
      adr := adr + Mbi.RegionSize;
    end;
    fs.Free; CloseHandle(hProcess);
  end;
end;

begin
  DumpMemory(GetCurrentProcessId);
end.

Автор: Budy 1.3.2006, 14:35
Snowy, просто унтерглиддер (с нем. на русский - "не описать словами"). Спасибо!

Автор: CaNIBaLchik 1.3.2006, 14:45
Snowy
круто!!!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)