Segmentation fault



  • Weiteres Stichwort in der x86-Welt: Protected Mode.



  • Vielen Dank schon einmal für eure Hilfen 🙂

    Was dann für mich weiterhin schleierhaft bleibt:
    Wie kann ein Programm wie zB Punkbuster den Quellcode eines anderen Programms analysieren?
    Analysiert Punkbuster nur den Code, der als eine Kette von Zeichen in einer Datei auf der Festplatte liegt, oder das tatsächliche Programm das während der Ausführung im Arbeitsspeicher liegt (was meiner Meinung nach logischer wäre)?
    Falls, wie von mir vermutet, das Programm im Arebeitsspeicher analysiert wird, wie kann Punkbuster den Programmcode lesen? Soweit ich weiß sind diese Pages als nicht lesbar markiert.
    Die einzige Möglichkeite die mir einfällt wäre, dass Punkbuster selbst das zu analysierende Programm interpretiert/ausführt und somit auch vollen Zugriff auf den Quellcode hat.

    Gruß 🙂



  • Oder Punkbuster hat einfach mehr Rechte vom System dafür bekommen doch in andere Bereiche zu lesen.



  • Danke für deine Hilfe 🙂
    Punkbuster und das zu analysierenden Programm würde sich aber dann trotzdem einen Adressraum teilen oder?
    Ansonsten könnte Punkbuster als eigenständiger Prozess nicht auf den Speicher des zu analysierenden Programms zugreifen, außer man deklariert die Pages mit dem Programm Code des zu analysierenden Programms als Shared (was ich mir schwer vorstellen kann) oder?

    Gruß 🙂



  • Wie das intern funktioniert weiß ich leider nicht, aber hier gibt es bestimmt jeden menge Profis die das wissen. Ich denke mir nur das es eine Möglichkeit geben muss um auch fremde Speicherbereiche zu lesen ansonsten könnte ein Viruskiller ja gar nicht richtig arbeiten.

    Vielleicht irgendwas mit diesen Ringen also Ring0 oder ähnliches. x86 und x64 arbeiten intern wohl auch noch mal sehr unterschiedlich dazu kann ich aber auch nix näheres sagen. Aber wie gesagt ich habe nicht die große Ahnung.



  • Ok trotzdem vielen Dank 🙂 Vllt haben wir ja Glück und jemand kann uns weiterhelfen.

    Ich stelle mir das bis jetzt nur etwas riskant vor, wenn ein Prozess wirklich lesenden Vollzugriff auf den Speicher hätte, da dies erstens schwer zu realisieren wäre und er zum schreiben ja stets seinen eigenen Adressraum nutzen müsste um nichts falsch zu machen. Somit müssten lesende Zugriffe auf Anfrage die MMU umgehen können.

    Gruß 🙂


  • Mod

    Klar geht das. Root darf alles. Wie das Punkbuster im speziellen macht, kann ich natürlich nicht wissen, aber das wird dann wohl mit Adminrechten laufen oder einen kleinen Treiber installieren, der mit Adminrechten läuft. Ist natürlich ein erhebliches Sicherheitsrisiko, so etwas, aber auf so etwas lässt man sich eben ein, wenn man solche Spiele installiert. Das ist dann eben irgendein kleiner Absatz in den AGB, dass die Kontrolle über den Computer an Punkbuster übergeben wird und keine Haftung für Schäden übernommen wird.



  • Danke für deine Antwort 🙂

    Wie schafft root es die MMU zu umgehen? Das verstehe ich leider noch nicht so ganz 😞
    Auch einem Prozess mit root-Rechten wird ja ein eigener Adressraum zugewiesen, wie schafft es dieser in die Adressräume anderer Prozesse zu kommen?

    Würde man Beispielsweise in C ein Programm schreiben wollen, dass von root ausgeführt werden soll, der zu beliebiger physikalischer Adresse den Speicherinhalt ausgeben soll, wie bewerkstelligt man dann zB sowas?

    Gruß und schönen Abend noch 🙂



  • rein theoretisch könnte er (root) doch den gesamten bereich (ram) auf eine neue page-table mappen und dann mit der arbeiten 😕




  • Mod

    Blue-Tiger schrieb:

    http://msdn.microsoft.com/en-us/library/ms680553(VS.85).aspx

    Genau. Und für die, die es interessiert: In unixartigen Systemen einfach über die Dateien im /proc Verzeichnis (In Unix ist alles eine Datei, auch der Speicherbeireich von Prozessen).



  • Danke für eure Hilfen 🙂

    Um bei den Unixartigen Systemen zu bleiben:
    Wie genau hat man sich in etwa die Umsetzung vorzustellen?
    Versuche ich aus einem laufenden Prozess heraus auf fremde Adressräume zuzugreifen, müsste ich doch irgendwie die MMU umgehen.
    Oder wird einfach die "fremde Page", auf die der konkrete Speicherbereich des fremden Adressraums liegt, temporär in meinen Adressraum gemappt?

    Gruß 🙂


  • Mod

    MatheStein schrieb:

    Wie genau hat man sich in etwa die Umsetzung vorzustellen?
    Versuche ich aus einem laufenden Prozess heraus auf fremde Adressräume zuzugreifen, müsste ich doch irgendwie die MMU umgehen.
    Oder wird einfach die "fremde Page", auf die der konkrete Speicherbereich des fremden Adressraums liegt, temporär in meinen Adressraum gemappt?

    😕 Ich glaube du verstehst nicht ganz was dir bisher erklärt wurde. Da muss gar nichts gemappt werden.
    Der Prozess fragt einfach "Was steht bei Prozess XYZ an Speicherstelle ABC?"
    Das Betriebssystem sagt: "Was geht dich das an?"
    "Ich bin root"
    "Oh, Entschuldigung. An Speicherstelle ABC steht 0xDEADBEEF. Kann ich sonst noch was für dich tun, Gebieter?"

    Da das Betriebssystem über der Specherverwaltung steht, kann es auf sämtlichen Speicher zugreifen, gar kein Problem. Bei Windows ebenso wie bei Unix, nur die Form der Anfrage unterscheidet sich. Bei Win eben mittels WinAPI und ReadProcessMemory, bei Unix mittels eines Öffnens und Lesens entsprechender Dateien.


Anmelden zum Antworten