2016-05-23 11 views
0

ich mit x86-Instruktionen arbeitet und jetzt sind verwirrt über:Die Lage des EIP und anderen Register in x86-Prozess

Wo tun x86-Register (wie: EIP, ESP usw.) speichert? Zum Beispiel, wenn ich ollydbg verwende, konnte ich sehen, was der tatsächliche EIP-Registerwert ist und wie er sich ändert.

Wenn es im Speicher speichert, wo ist der tatsächliche Standort? (Zum Beispiel in .data .text oder .bss)

Und kann ich die EIP eines anderen Prozesses manuell ändern?! Wie ?!

Antwort

5

Sie haben ein ernsthaftes Missverständnis darüber, was ein Register ist.

Ein Register ist eigentlich ein Register, dh. ein wirklich kleines Stück Speicher im Prozessor, der die Operanden enthalten kann oder das Ziel eines CPU-Befehls sein kann. Es hat keine Adresse im Speicher - es ist wirklich adressierbar wie das Register es ist.

RAM ist etwas völlig anderes - ein x86-Programm kann komplett ohne RAM arbeiten, aber es gibt keine Operation, die nicht auf Registern funktioniert. Um zum Beispiel zwei Zahlen hinzuzufügen, die sich irgendwo im RAM befinden, verwenden Sie LOAD-Anweisungen, um diese beiden Zahlen in zwei Register zu laden, und dann eine ADD-Anweisung, um der anderen eine Nummer zuzuordnen, die auf ein Register abzielt, und dann gibt es eine STORE-Anweisung nimmt den Registerwert und schreibt ihn an eine Adresse im RAM.

Es gibt also keine "prozessspezifischen" Register. Jeder CPU-Kern hat genau einen Satz von Registern (einige Besonderheiten, wie die Virtualisierung), und es gibt Mechanismen, um Register im RAM zu speichern und sie aus dem RAM wiederherzustellen, zum Beispiel beim Aufruf einer Funktion oder beim Umschalten von Kontexten.

1

Register werden in Registern gespeichert, nicht im eigenen Speicher des Prozesses.

Debugger verwenden eine spezielle vom Betriebssystem bereitgestellte Schnittstelle zum Ändern von Registern eines laufenden Prozesses, einschließlich EIP. In Linux ist es die ptrace(2) API.

Die Möglichkeit, die Register eines Prozesses von außerhalb des Prozesses zu ändern, hängt davon ab, wie das Betriebssystem den Architekturzustand eines Prozesses im Speicher für context switches speichert.

Verwandte Themen