RAM Blocken



  • Hallo zusammen,

    Wie kann man unter linux bei einem Programm benutzten RAM blocken bestimmen?

    Ich will eigentlich ein programm implementieren welche in Linux umgebung ein laufende Programm beim Laufzeit analisiert und bestimmt wo die Variablen des Programms im RAM gespeicher sind.

    Hat Jemand eine Idee?

    Danke



  • Und jetzt nochmal auf Deutsch/Englisch, bitte!



  • Ich versuch nochmal 🙂

    Mein Programm soll ein unter Linux laufende Programm beim Laufzeit analysieren und feststellen wo die variablen des Programms im RAM gespeichert sind.

    Programm X:

    main()
    int a; 
    a = 5; 
    }
    

    Programm Y soll herausfinden wo dieses "integer a" im Ram gespeichert ist.

    Wie kann man dieses Programm Y implementieren.



  • Stichwort Virtual Memory. Mehr solltest du nicht brauchen, bisschen suchmaschinen (tolles Verb), Wikipedia befragen, man-Pages durchlesen.

    Und das Wort "Blocken" gibt es in diesem Kontext nicht. Du meinst wohl eher "Block". Wobei man bei der Thematik auch nicht von Blöcken spricht.



  • Ist Progamm Y nicht so etwas wie ein Debugger?



  • Die einfache Antwort: Ein anderes Programm Y kann das nicht.



  • @ DirkB

    Sehr gute idee. Falls ein Debugger so etwas feststellen kann, kann Programm Y auch oder?



  • Debugger unter UNIX u.ä. machen das über ptrace.

    Allerdings erwarten Debugger auch, dass das Programm vorher entsprechend präpariert wurde - insbesondere, dass Debug-Symbole einkompiliert wurden. Bei einer handelsüblichen Release-Version mit Optimierungen und ohne diese Symbole kann der Debugger höchstens den Maschinencode disassembeln und dir sagen, welche Werte wo im virtuellen Adressraum des Prozesses bzw. in den Registern stehen, aber die Information, dass der Inhalt von Register eax im Quellcode mal i hieß, ist dann nicht mehr vorhanden.

    Zumal optimierter Maschinencode häufig nur noch eine sehr lose Ähnlichkeit zu dem aufweist, was mal an den Compiler übergeben wurde. In deinem Codebeispiel ist etwa davon auszugehen, dass a komplett wegoptimiert und die Frage danach, wo es denn im Speicher liege, damit hinfällig würde.

    Bevor du dich an ptrace heranwagst (das ist ein ziemliches Monster), magst du vielleicht mal etwas genauer beschreiben, was du eigentlich vorhast? Womöglich gibt es einfachere Wege nach Rom.


Anmelden zum Antworten