Головна сторінка
Top.Mail.Ru Яндекс.Метрика
Форум: "WinAPI";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

Вниз

отримати значення з процесу Знайти схожі гілки


Sergadm   (2002-11-09 09:04) [0]

як визначити адресу процесу і висмикнути значення з процесу з певним зміщенням від початкового адреси
(Прикладом може служити artmony ломалка ігор)



paul_shmakov   (2002-11-09 14:52) [1]

цей приклад я сюди вже постил. перша програма шукає входження якогось значення типу DWORD в адресному просторі зазначеного процесу.
// // Пошук значення типу DWORD в зазначеному процесі // paul_shmakov@mail.ru // program search; {$ APPTYPE CONSOLE} uses Windows, SysUtils; var ProcessID: DWord; ProcessHandle: THandle; Mbi: TMemoryBasicInformation; Addr: DWord; Value: DWord; I: Cardinal; Buf: PChar; BytesRead: DWord; begin if ParamCount <2 then begin WriteLn ( "Usage: search.exe processid value"); Exit; end; ProcessID: = StrToInt (ParamStr (1)); WriteLn ( "Process id:" + IntToStr (ProcessID)); Value: = StrToInt (ParamStr (2)); WriteLn ( "Value to search:" + IntToStr (Value)); // // Відкриваємо процес // ProcessHandle: = OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ or PROCESS_VM_OPERATION, false, ProcessID); if ProcessHandle <> 0 then try Addr: = 0; // // Перераховуємо усі регіони віртуальної пам'яті процесу // while VirtualQueryEx (ProcessHandle, Pointer (Addr), Mbi, SizeOf (Mbi)) <> 0 do begin // Uncomment щоб побачити список регіонів, знайдених в адресному просторі // WriteLn ( "region:" + IntToHex (Integer (Mbi.BaseAddress), 8) + // "size:" + IntToStr (Mbi.RegionSize)); // // Якщо регіону виділена пам'ять, і регіон не є "сторожовим" (як вершина стека), // то читаємо цей регіон // if (Mbi.State = MEM_COMMIT) and not ((Mbi.Protect and PAGE_GUARD) = PAGE_GUARD) then begin // // Це демонстраційна програма, тому тут виділяється буфер під весь регіон. // Регіон може бути досить великим, тому краще читати його блоками для економії // пам'яті. Але тут для простоти алгоритму вся оптимізація Похер. // GetMem (Buf, Mbi.RegionSize); try // // Читаємо весь регіон в виділений буфер // if ReadProcessMemory (ProcessHandle, Mbi.BaseAddress, Buf, Mbi.RegionSize, BytesRead) then begin // // Шукаємо значення типу DWORD в буфері // for I: = 0 to BytesRead - SizeOf (Value) do begin if PDWord (@Buf [I]) ^ = Value then // Знайдено, виводимо WriteLn ( "Value" + IntToStr (Value) + "found at" + IntToHex (Integer (Cardinal (Mbi.BaseAddress) + I), 8)); end; end else WriteLn ( "Failed to read process memory" + IntToStr (GetLastError)); finally FreeMem (Buf); end; end; // Обчислюємо адреса следуюшего регіону Addr: = Addr + Mbi.RegionSize; end; finally CloseHandle (ProcessHandle); end else WriteLn ( "Failed to open process"); end.


а це демостраціонная програма, в якій для прикладу йде пошук.
program someprog; {$ APPTYPE CONSOLE} uses SysUtils; var SomeValue: Integer; begin SomeValue: = 1234512345; WriteLn ( "One variable of this program has a value" + IntToStr (SomeValue)); WriteLn ( "Press any key to exit"); ReadLn; end.

все откомпіліть і запускати
search.exe ідентіфікатор_процесса_someprog 1234512345



сторінки: 1 вся гілка

Форум: "WinAPI";
Поточний архів: 2002.12.23;
Завантажити: [xml.tar.bz2];

наверх









Пам'ять: 0.57 MB
Час: 0.028 c
3-74583
Gaber
2002-12-04 15:26
2002.12.23
файли Exel


1-74771
oddboy
2002-12-11 07:55
2002.12.23
Як динамічно створити CheckBox?


3-74568
Наталі
2002-12-04 09:33
2002.12.23
проблеми з репортом !!!!!


3-74612
Lnstr
2002-12-04 17:31
2002.12.23
Як прочитати Blob і розібрати побайтно


1-74682
дитина
2002-12-13 11:18
2002.12.23
extention v saveDialog





африкаанс албанський арабська вірменин азербайджанець баскський білоруський болгарська каталонський Китайська (спрощене письмо) Китайський традиційний) хорватський чеська данську мову нідерландський Ukranian естонець Філіппінська фінську мову французький
галісійська грузинський німецький грецький гаїтянський креольський давньоєврейську хінді угорський ісландський індонезієць ірландський італійський японський корейський латиська литовець македонець малайський мальтійський норвежець
перс полірування португальська румунський російська сербський словацький словенський іспанська суахілі шведську мову тайський турецька український урду в'єтнамський валлійський ідиш бенгальський боснійський
кебуано есперанто гуджараті хауса хмонг ігбо яванський каннада кхмерская Лао латинь маорі маратхі монгольський непальська панджабі сомалійський тамільська телугу йоруба
зулуський
Англійська Французький Німецький Італійський Португальська Русский Іспанська