Adres w pamięci procesu

0

Witam
,mam pytanie. Jesli mam PID procesu ,to w jaki sposób mogę uzyskać dwie dane: Adres początku bloku pamięci procesu , i rozmiar bloku pamięci?

Pozdrawiam

0

Nie ma czegoś takiego, każdy proces ma własną prywatną wirtualną przestrzeń adresową, w jej obrębie przydzielane są bloki pamięci wirtualnej. Ten sam adres w każdym procesie może zawierać zupełnie inne dane, może też być w ogóle niezaalokowany.

0
PS napisał(a):

Nie ma czegoś takiego, każdy proces ma własną prywatną wirtualną przestrzeń adresową, w jej obrębie przydzielane są bloki pamięci wirtualnej. Ten sam adres w każdym procesie może zawierać zupełnie inne dane, może też być w ogóle niezaalokowany.

Nie chodzi mi o adres w procesie ,tylko o adres bezwzględny początku bloku pamięci danego procesu w pamięci komputera. I jego rozmiar.

@Widzę teraz ,że tytuł jest dwuznaczny ,powinienem nazwać temat Adres procesu w pamięci ;)

0

adres rzeczywisty to może być nawet dysk twardy i w zasadzie tylko system operacyjny powinno obchodzić gdzie się znajdują te dane rzeczywiście

0

,tylko o adres bezwzględny początku bloku pamięci danego procesu w pamięci komputera

A co jak nie jest w ramie tylko w pagefile czy gdzie indziej!? Albo piszesz sterownik który będzie to czytać, albo nie wiesz że nie można się dostać z jednego programu do drugiego bez WinApi... od czytania pamięci innego procesu jest ReadProcessMemory, a żeby uzyskać handle użyj OpenProcess
Może zamiast tłumaczyć co chcesz uzyskać w połowie, wytłumacz co chcesz końcowo uzyskać to powiemy jak się do tego dostać...

0
Maurycy7 napisał(a):

Nie chodzi mi o adres w procesie ,tylko o adres bezwzględny początku bloku pamięci danego procesu w pamięci komputera. I jego rozmiar.

Zrozum, nie ma czegoś takiego. Przestrzeń nazywa się "wirtualną" ponieważ jest tylko obietnicą, że pod danym swoim adresem proces "zobaczy" te dane, kiedy będzie ich potrzebował. To tylko swego rodzaju obietnica i projekcja, proces nie ma przełożenia na pamięć fizyczną, nie ma w niej początku ani końca, nie stanowi pojedynczego bloku. Wirtualna przestrzeń adresowa składa się ze stron mających (zazwyczaj) 4kB. Zaalokowana strona może znajdować się w pamięci RAM, w adresie znanym tylko systemowi operacyjnemu, który w każdej chwili może te dane przenieść w zupełnie inne miejsce, w sposób niedostrzegalny dla procesu. Strona może też znajdować się w pliku wymiany, dowolnym innym pliku na dysku lub wręcz stanowić podmapowaną pamięć jakiegoś fizycznego urządzenia. Pamięć procesu stanowi dynamicznie zmieniającą się mieszankę setek tych "projekcji", zmieniającą się w sposób całkowicie niedostrzegalny dla samych programów, kontrolowany przez jądro systemu.

0

Może zamiast tłumaczyć co chcesz uzyskać w połowie, wytłumacz co chcesz końcowo uzyskać to powiemy jak się do tego dostać...

Chcę zrobić mapę pamięci RAM dowolnego procesu ,cos jak user image. Potrzebuję więc dwa parametry - jak na zdjęciu BASE i SIZE.

 BOOL WINAPI ReadProcessMemory(
  __in   HANDLE hProcess,
  __in   LPCVOID lpBaseAddress,
  __out  LPVOID lpBuffer,
  __in   SIZE_T nSize,
  __out  SIZE_T *lpNumberOfBytesRead
);

Tutaj widzę ,że tez muszę znać Base i Size ( max Size ,żeby odczytać całą pamięć ,a nie kawałek).

0
Maurycy7 napisał(a):

Chcę zrobić mapę pamięci RAM dowolnego procesu

To nie jest RAM tylko właśnie wirtualna przestrzeń adresowa procesu.

Maurycy7 napisał(a):

Tutaj widzę ,że tez muszę znać Base i Size ( max Size ,żeby odczytać całą pamięć ,a nie kawałek).

Ile razy mamy pisać, że nie ma czegoś takiego jak "cała pamięć"? "Cała pamięć" to nieciągły obszar o rozpiętości 2-3GB (na 32bit), składa się z dziesiątek mniejszych bloków przedzielonych niedostępnymi regionami. Nie odczytasz tego za jednym zamachem, VirtualQueryEx pozwala na odpytanie o rozmiary i stan kolejnych bloków.

Mam wrażenie, że kolejny script kiddie próbuje pisać hacktoole.

0
 VirtualQueryEx

Przynajmniej mam jakis punkt zaczepienia.

Mam wrażenie, że kolejny script kiddie próbuje pisać hacktoole.

Nie obrażaj ,każdy kiedy zaczynał. Nie wiedziałem ,że to co chcę zrobić do podglądania notatnika ,to jakis wielki hacktool :D Zwyczajnie ciekawi mnie jak co działa "od srodka".

0
Maurycy7 napisał(a):

Nie obrażaj ,każdy kiedy zaczynał. Nie wiedziałem ,że to co chcę zrobić do podglądania notatnika ,to jakis wielki hacktool :D Zwyczajnie ciekawi mnie jak co działa "od srodka".

No to zacznij od lektury materiałów na MSDNie dotyczących zarządzania pamięcią w Win32 i działania kontrolek WINAPI, to wszystko jest precyzyjnie omówione, dobrze radzę. Z Notatnikiem będziesz miał o tyle dużo zabawy, że korzysta on z kontrolki EDIT, która wewnętrznie używa stringów unicode, tekst jest trzymany bodajże po jednej linii.

0

O ile się nie mylę pytającemu chodzi o podstawowe informacje ImageBase oraz ImageSize podawane dla procesów przez różne PE Edytory na przykład Lord PE (Deluxe). Takie informacje o ile się nie mylę da się uzyskać nie tylko wspomnianą VirtualQueryEx dla adresu bazowego, ale również dodatkowe informacje można ustalić w taki sposób: http://technet.microsoft.com/en-us/query/ms682050 - pewnie można i wygooglować coś w Delphi, ja się nie zagłebiałem, a że kod nie jest skomplikowany to na Delphi łatwo go sobie można przetłumaczyć, co już pozostawiamy dociekliwemu pytającemu ;>

0
olesio napisał(a):

O ile się nie mylę pytającemu chodzi o podstawowe informacje ImageBase oraz ImageSize podawane dla procesów przez różne PE Edytory na przykład Lord PE (Deluxe).

Ale się mylisz, spójrz na screen kilka postów wyżej, ewidentnie sterta.

olesio napisał(a):

również dodatkowe informacje można ustalić w taki sposób: http://technet.microsoft.com/en-us/query/ms682050

Przy czym te informacje są bezwartościowe, to tylko statystyki "wydajnościowe", nie przekładające się na widoczność pamięci procesu, przynajmniej z punktu widzenia aplikacji użytkownika.

1 użytkowników online, w tym zalogowanych: 0, gości: 1