dump - process memóriaterületének figyelése, futás közben

 ( dio | 2012. január 14., szombat - 19:30 )

Sziasztok,
szeretném a heap és a stack állapotát futás közben megfigyelni,
saját C program futása közben.

Hogy lehet elérni, hogy egy futó process által használt memóriaterületet
lássak egy külön ablakban, aminek a tartalma a követi a program futását?

A program a heap és a stack működésének megfigyelésére kell.

Eddig a scanmem a legjobb, amit találtam:
http://code.google.com/p/scanmem/
de hátha van jobb eszköz,
gondoltam megkérdem.

A lényeg, hogy szeretném a memóriatartalmat közvetlenül vizsgálni.

szerk: Linuxra kellene a memóriavizsgálat.

köszönöm dio

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

gdb?

--
"You're NOT paranoid, we really are out to get you!"

Igazad van, a gdb is egy lehetőség.
Úgy tudom, hogy arra való hogy a program futását adott pontokon megállthassam, és ott valóban a változók értékeit meg tudom nézni.

de én igazából kívülről, felülről szeretnék ránézni a programra, a memóriaterület egészére.

Szia dio

"Úgy tudom, hogy arra való hogy a program futását adott pontokon megállthassam, és ott valóban a változók értékeit meg tudom nézni."

Igy van, azzal a kulonbseggel, hogy nem csak a valtozokat, hanem tetszoleges memoriateruletet es a regisztereket is tudod irni/olvasni.

--
"You're NOT paranoid, we really are out to get you!"

talan ptrace is jo, de mire is kell ez az egesz?

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Just FYI: A gdb meg a scanmem is használja ptrace-t.
Sőt valószínűleg kimondottan a ptrace API-t használja erre mindkettő, de van egy olyan tippem, hogy az összes hasonló program is ezt használja Linux környezetben.

Pár nappal ezelőtt a záróvizsgámon kaptam egy kérdést, ami a heap-re és a stack-re vonatkozott.

És nem tudtam rá válaszolni - a kérdés arra vonatkozott, hogy a függvények változói hol jönnek létre - és mi a különbség a heap és a stack között, melyik mire való, hogy működik.

mivel két tétel volt, illetve a szakdolgozatom, átlagolva jó jegyet kaptam, de eldöntöttem, hogy utánajárok hogy pontosan hogy működik a memória felhasználása, mi történik a háttérben az egyes területeken.

Most pár napot azzal töltöttem, hogy rákerestem a reverse engineering, linux memory debugger, memory editor, monitoring és hasonló szavakra - régen a C64-es korszakban még volt olyan program, amivel egy az egyben meg lehetett nézni a memória tartalmát - reméltem hogy Linuxra is találok ilyet, hogy egy működő programnál tudjam megnézni hogy mondjuk mi történik sok rekurzív függvényhívás esetében.

Az egy dolog, hogy elméletben ábrákon lerajzolják a szerkezetét a processz által használt memóriatartománynak, de én ha lehet élőben szeretném ezt megnézni - mint amikor a hálózati adatforgalmat hallgatja valaki.

Egy normál program sebességét nyilván nem tudnám szemmel követni, de szeretnék egy egyszerű, pár másodpercenként ciklusban lépegető állatorvosi ló programot készíteni, amit aztán a memóriában meg tudok nézni.

Erről lenne szó.

Jó éjt, dio

Melyik tanintézményben?

Szeged, SZTE Programtervező informatikus.
Szia dio

Szia, a vizsgán korrektek voltak, tényleg én zavarodtam bele a kérdésbe.

Ket megjegyzes:
- Ha az oprendszer nem relevans, akkor jobban jarsz, ha windowson probalkozol. Pl. egy immunity debugger sokkal fejletteb es kezreallobb dolog, mint egy gdb, plusz normalisabban lehet scriptelni is.
- A heap mukodeset nem valoszinu, hogy ennyibol megerted. :)

--
"You're NOT paranoid, we really are out to get you!"

Szia, felmerült bennem az a gondolat, hogy ha a scanmem tud keresni a memóriában, akkor már majdnem azt csinálja ami nekem kell:
csak ki kell iratnom hogy épp melyik területet vizsgálja, meg az értékeket.

Örültem volna ha Linuxos megoldást találok, de ha minden kötél szakad, akkor win-en meg fogom nézni.
:-)

Szia, mit javasolnál, hol tudnám ezt megtanulni-megérteni?

Ez nagyon jó, köszönöm! olvasom!