none
[C/Windows] HEAP Speicher & Funktionen RRS feed

  • Frage

  • Hey,

    im HEAP-Speicher werden ja alle Funktionen & variablen eines Programmes während der Laufzeit "gespeichert".

    Ist es dann möglich, wenn man die genaue Adresse des Programmes kennt, alle exestierende Funktionien & Variablen des Programmes auszulesen & die Funktionen des Programmes einfach aufzurufen?

    Wen ja, wie ist das dann überhaupt möglich (also die umsetzung).

    MfG Emanuel Bennici


    Emanuel B.; 14 Jahre alt

    Freitag, 16. Juni 2017 22:20

Antworten

  • Für 'native' Anwendungen (z. B. C/C++):
    Würde jetzt nicht den Begriff Heap verwenden, ist ja nur ein spezieller Teil des gesamten Speichers eines Prozesses - der eigentlich nicht "ausführbar" sein sollte. 

    Für erste Experimente würde ich mir vielleicht einen Debugger (windbg) besorgen, der auch im 'low-level' Bereich etwas Komfort bietet  ("Debugging Tools for Windows") und mit einer 'systemeigenen' Anwendung (86) beginnen.
    Wobei das Prinzip (grundsätzlich auch mit VS möglich) hier angedeutet wird:
    Stupid debugger tricks: Calling functions and methods
    https://blogs.msdn.microsoft.com/oldnewthing/20070427-00/?p=27083
    Auf jeden Fall sollte
    WARNING: This can have serious side-effects,
    including deadlocks and corruption of the debuggee.
    durchaus ernst genommen werden - kann ziemlich komplex werden.

    Nützliche Funktionen z. B. OpenProcess, SetThreadContext (Register), ReadProcessMemory, WriteProcessMemory ...
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms679310(v=vs.85).aspx

    Mit freundlichen Grüßen
    • Als Antwort markiert BNCrazzyCat Dienstag, 20. Juni 2017 10:37
    Sonntag, 18. Juni 2017 11:43

Alle Antworten

  • Hi Emanuel,
    woher hast Du die Information, dass Funktionen und Variablen im Heap gespeichert werden?

    Neben statischen Variablen werden im Heap die Objekte (-inhalte) gespeichert, siehe z.B. hier. Variableninhalte werden im Stack abgelegt (außer Werte statischer Variablen).

    Für die Übersetzungsergebnisse des JIT wird nach meinem Wissen der Heap nicht genutzt. Da der Speicher dynamisch und virtuell verwaltet wird, nutzt eine konkrete Adresse im Programm wenig, da sie nach dem nächsten Lauf des Garbage Collectors schon wieder anders sein kann, insbesondere für die virtuell verwalteten Bereiche. Der direkte Zugriff auf virtuelle Adressen stellt ein Sicherheitsrisiko dar, da die CLR in diesem Fall keine Typsicherheit mehr prüfen kann. Lesend zuzugreifen ist kein Problem. Dazu kann man Overlay-Strukturen nutzen, die aber in Abhängigkeit von der eingesetzten Rechnerarchitektur unterschiedlich ist. Sprung-Operation werden über die CLR organisiert und überwacht. Ob es überhaupt möglich ist, virtuelle Programmadressen selbst zu manipulieren, kann ich nicht sagen und kann es mir auch nicht vorstellen.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Samstag, 17. Juni 2017 08:13
  • Für 'native' Anwendungen (z. B. C/C++):
    Würde jetzt nicht den Begriff Heap verwenden, ist ja nur ein spezieller Teil des gesamten Speichers eines Prozesses - der eigentlich nicht "ausführbar" sein sollte. 

    Für erste Experimente würde ich mir vielleicht einen Debugger (windbg) besorgen, der auch im 'low-level' Bereich etwas Komfort bietet  ("Debugging Tools for Windows") und mit einer 'systemeigenen' Anwendung (86) beginnen.
    Wobei das Prinzip (grundsätzlich auch mit VS möglich) hier angedeutet wird:
    Stupid debugger tricks: Calling functions and methods
    https://blogs.msdn.microsoft.com/oldnewthing/20070427-00/?p=27083
    Auf jeden Fall sollte
    WARNING: This can have serious side-effects,
    including deadlocks and corruption of the debuggee.
    durchaus ernst genommen werden - kann ziemlich komplex werden.

    Nützliche Funktionen z. B. OpenProcess, SetThreadContext (Register), ReadProcessMemory, WriteProcessMemory ...
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms679310(v=vs.85).aspx

    Mit freundlichen Grüßen
    • Als Antwort markiert BNCrazzyCat Dienstag, 20. Juni 2017 10:37
    Sonntag, 18. Juni 2017 11:43