Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Technische Informatik » Little Endian auf dem Stack? » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Little Endian auf dem Stack?
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Liquid
Grünschnabel


Dabei seit: 09.02.2017
Beiträge: 6

Little Endian auf dem Stack? Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hi, es geht gerade um Reverse Engineering aber mir sind jetzt schon seit einiger Zeit einige Sachen nicht ganz klar und da frage ich hier lieber noch einmal nach, da ich das auch verstehen will. Ich finde das nämlich alles ziemlich interessant. Da es hier um die Ablage auf dem Stack, aber auch Reverse Engineering geht, bin ich nicht ganz sicher, ob ich hier im Forum in dem Bereich richtig bin aber sonst bitte verschieben.

Es geht um ein Beispiel, bei dem ich irgendwie nicht ganz mitkomme und auf einmal auch ein paar Sachen nicht mehr ganz verstehe. Das Beispiel ist mit Radare2 gemacht worden und es geht eigentlich nur um ein Beispiel mit einer main Funktion und einer Funktion func. In der main Funktion wird nur die Funktion func aufgerufen und in der func Funktion wird etwas ausgegeben, etwas mit gets eingelesen und das eingegebene wieder ausgegeben.
Bild 1 zeigt die disassemblierte func Funktion, wo zudem auch noch drei Breakpoints mit radare gesetzt wurden.
Bild2 zeigt alles, was nach der Speicheradresse, die im Register rdi liegt auf dem Stack liegt und weiter unten ist die disassemblierte main Funktion. Testweise wurden da mal 200 A's mit gets eingelesen, nur damit ihr euch nicht wundert.
Das Ziel ist es, eine Funktion aufzurufen, die nicht im Quellcode selbst aufgerufen wird aber dennoch da ist.

Meine Fragen dazu:
1) Das Beispiel ist auf Linux. Ist der Stack (oder der gesamte RAM) da standardmäßig oder allgemein - auch nicht Linux Betriebssysteme - die Byte-Reihenfolge Little Endian?
2) Das ist doch richtig, dass das keine physischen Adressen sind, die jeweils immer angegeben werden, also alles nur virtuelle Adressen?
3) Es geht ja auch darum, den RIP (Return Instruction Pointer) zu manipulieren, der ja auch auf dem Stack liegt. Der scheint ja im Stack an der rot markierten Stelle zu sein. Wie kommt man da aber auf die hexadezimale Angabe? Das soll ja wohl Little Endian sein aber wie kommt man von 0x00400725 auf die im Kasten stehenden 8 Byte? Radare lässt auch übrigens wohl führende Nullen weg, da das ganze auf einem 64 Bit Prozessor läuft.

EDIT: Das mit 3) hat sich erledigt. Irgendwie hatte ich mich da total verlesen. Passt ja doch. Zunge raus

Liquid hat diese Bilder (verkleinerte Versionen) angehängt:
re part1.jpg re part2.jpg

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Liquid: 06.10.2018 11:57.

06.10.2018 11:47 Liquid ist offline Beiträge von Liquid suchen Nehmen Sie Liquid in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 639
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Zu 1: ob little oder big Endian hängt von der Prozessorarchitektur ab, nicht von Betriebssystem. Linux gibt es sowohl für Little Endian Architekturen, wie auch Bug Endian.
Zu 2: wenn es ein normales Programm ist, sind es virtuelle Adressen. Bei Kernel-Code weiß ich es nicht so genau.

Gruß
Marco
07.10.2018 10:09 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Technische Informatik » Little Endian auf dem Stack?