Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

CommandLine...in ReadProcessMemory??? [D7, WinXP]


Cj ©   (2007-07-18 04:37:00) 

Вотв ArtMoney короче нашел адрес указатель на текст командной строки любово процесса. отсеивал и нашел окончательное решение.
Сделал две функции которые берут ком-строку процесса:

function GetProcessCommandLineInSP1(PID:integer):string;// тестил у себя на SP1 в XP Professional
var
  h:cardinal;
  j:cardinal;
  b:byte;
  r:cardinal;
  path:string;
  adr:cardinal;
begin
 h := openprocess(Process_VM_READ, false, pid);//открываю процесс на чтение
 ReadProcessMemory(h,ptr($77c4c7a8){адрес-указатель на текст в процесах 4 байтное значение},@adr,4,r);
 for j:=0  to 255 do
 begin
      ReadProcessMemory(h,ptr(adr+j),@b,1,r);//считываю текст 1-байтные значения
      case b of
      32..126,192..255:path:=path+chr(b);//читаю толко буквы и знаки//но все равно мусор есть.
      end;
 end;
 result:=path;
closehandle(h);//закрываю проц.
end;
function GetProcessCommandLineInSP2(PID:integer):string;// тестил у брата на SP2 в XP Professional, тк первая функ-я вадает у него совсем другое
var
  h:cardinal;
  j:cardinal;
  b:byte;
  r:cardinal;
  path:string;
  adr:cardinal;
begin
 h := openprocess(Process_VM_READ, false, pid);//открываю процесс на чтение
 ReadProcessMemory(h,ptr($77c4c7a8){адрес-указатель на текст в процесах 4 байтное значение},@adr,4,r);
 for j:=0  to 255 do
 begin
      ReadProcessMemory(h,ptr(adr+j),@b,1,r);//считываю текст 1-байтные значения
      case b of
      32..126,192..255:path:=path+chr(b);//читаю толко буквы и знаки//но все равно мусор есть.
      end;
 end;
 result:=path;
closehandle(h);//закрываю проц.
end;


сначала то я сделал для своего: у меня SP1 а у брата это выдавало фигню, ну в общем нашел адреса к-строки и у него, и вот у меня вопрос: эти адреса зависят от Servica Pack-ов или они у каждого разные, протестите плиз функции и скажите получилось, или нет.
И еще: если все-таки для каждого компа адреса разные, то их тоже можно как нибудь найти, только вот как?-если есть идеи, скажите.


SLoW.AlfaMoon.Com   (2007-07-19 09:34:00) [1]

про pEB слышал?

по смещению 10h от адреса PEB находится указатель на _RTL_USER_PROCESS_PARAMETERS, а там по смещению 40h находится указатель на UNICODE_STRING с командной строкой.

первое смещение верно для 2k,xp,2k3. второе в хр, но думаю 2к и 2к3 то же (проверить негде)

на всякий случай функция

 function GetProcessPebAddress(ProcessHandle: THandle): PPeb;
   var InfoLen, InfoSize: DWORD;
       Info: PPROCESS_BASIC_INFORMATION;
       ns: ntstatus;
 begin
   result := nil;
   InfoLen := sizeof(_PROCESS_BASIC_INFORMATION);
   InfoSize := 0;

   Info := VirtualAlloc(nil,InfoLen,MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);

   ns := ZwQueryInformationProcess(ProcessHandle,ProcessBasicInformation, Info,
                                 InfoLen, @InfoSize);
   Result := Info.PebBaseAddress;
 end;


Cj   (2007-07-18 18:02:00) [2]

[5] в чем прикол? [6] OpenProcess я спрашивал, но кода CommandLine ты мне не давал, я эту ф-ю доделал, но все равно спасибо


SLoW.AlfaMoon.Com   (2007-07-18 17:27:00) [3]

я же тебе давал код! в вопросе про openprocess или гдето еще. код у меня дома, завтра могу принести если не забуду)


Сергей М.   (2007-07-18 17:00:00) [4]


> Cj ©   (18.07.07 16:19) [4]


Кулибин ты и есть кулибин)


Cj   (2007-07-18 16:19:00) [5]

спасибо, почитал. В принципе я делал 2-м неполным способом. Получается здесь Указатель адреса указателя, вот как


Сергей М.   (2007-07-18 08:28:00) [6]


> Cj


http://rsdn.ru/Forum/message/18652.flat.aspx


Сергей М.   (2007-07-18 08:14:00) [7]


> $77c4c7a8){адрес-указатель на текст в процесах 4 байтное
> значение}


Кулибин)


Rocki   (2007-07-18 07:18:00) [8]

у меня на СП2 работает, только впереди какие-то закорючки


Наверх

Титульная страница Поиск, карта сайта Написать письмо