Krautkanal.com

Veröffentlicht am 2015-11-17 00:50:54 in /prog/

/prog/ 8100: Hallo Bernd, ich bastel gerade an einer Art Debugger...

tereshenkov Avatar
tereshenkov:#8100

Hallo Bernd,

ich bastel gerade an einer Art Debugger in C++.

Der zu debuggende Prozess (Tracee) wird mittels ptrace durch einen Tracer-Prozess überwacht und gesteuert.


Wie kann der Tracer an die Speicheradressen von dem Heap des Tracees gelangen?
Anfangs- und Endadresse des Heaps würden mir genügen.

Vielen Dank!

liang Avatar
liang:#8101

Reicht grep heap /proc/$PID/maps?

adewaleolaore Avatar
adewaleolaore:#8102

>>8100
Hallo Bernd.
Ich finde es sehr löblich und großartig dass du dich mit solchen niedrig-leveligen und internen
Dingen deines Rechners beschäftigt. Bernd findet derlei Arbeit und Betätigung
deutlich ehrenswerter und unterstützenwerter als in Java Framework xy Bauklötzchen mäßig Software oder
Webseiten server code zusammen zu stecken.

Du hast ptrace() erwähnt also gehe ich davon aus, dass dein Tool unter Linux
oder einem anderem Unixoid laufen wird.

Ich kann dir jetzt nicht sofort die direkte Antwort geben aber jedoch einige Zeiger
in die richtige Richtung die dir weiterhelfen werden.

Zum einen gibt es da diesen [1] Stapelüberlauf Artikel.

Zum anderen noch ein paar Gedanken:
1. Du befindest dich hier ja im virtuellen RAM des callees und möchtest eine
virtuelle Speicheradresse. Dein Prozess ist ja ein ELF Binary, ich könnte
mir vorstellen die Heap grenzen sind als ein Attribut im ELF Format zu finden.
(kommt auch in [1] vor)
2. in /proc/ sollte es da dinge geben.
3. Vlt gibt es auch ein spezielles register, ähnlich zum stackframe pointer für den heap.
4. Falls du an Hintergrund wissen darüber interesiert bist [2] ist ein guter artikel.


Elfenjungen:
[1] http://stackoverflow.com/questions/3565232/how-to-programmatically-get-the-address-of-the-heap-on-linux
[2] http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory/

cat_audi Avatar
cat_audi:#8113

>>8102
>>8101

Genau das habe ich gesucht, vielen Dank Euch beiden! :3