Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: void am 14. July 2009, 21:49
-
Hallo Leute,
abgesehen von den "normalen" Registern wie cs, ds und ss gibt es noch drei weitere Register: es, fs und gs. Beim debuggen von Anwendungen sehe ich öfters, dass das FS-Register z.B. bei Pointern, Exceptions oder der IsDebuggerPresent-Funktion verwendet wird.
Meine Fragen: Wofür ist das FS-Register da und wann braucht man es? Wie ist das FS-Register aufgebaut?
void
-
in meinem assembler buch stand dazu was drinn:
FS ist ein ganz normales segmentregister das ein word groß ist. es ist ein extrasegment wie ES.
GS ist m übrigen genauso.
alle angaben ohne gewähr ;) ich lass mich gerne berichtigen
-
Das FS Register unterscheidet sich technisch nicht von den anderen.
Windows nutzt es allerdings für einen besonderen Zweck. Die Basis von FS zeigt dort auf den Thread Information Block (http://en.wikipedia.org/wiki/Win32_Thread_Information_Block). In dieser Datenstruktur sind ein paar Informationen über den aktuell laufenden Thread gespeichert.
-
Hier habe ich eine einfache Funktion(C++) um zu prüfen, ob das Programm im Debugger läuft oder nicht:
bool MyIsDebuggerPresent()
{
__asm
{
MOV EAX, FS:[0x18]
MOV EAX, [EAX+0x30]
MOVZX EAX, BYTE PTR [EAX+2]
}
}
Debugge ich nun über die erste Zeile, befindet sich im EAX-Register folgender Wert: 7FFDD000. Woher kommt dieser Wert? Ist somit der Wert die lineare Adresse des TIBs? :?
-
Jop
-
Was geht in der zweiten Zeile vor sich?
-
Hi,
Naja in der zweiten Zeile wird das was an Adresse
0x7FFDD000 + 0x30 = 0x7FFDD030
steht ins eax geladen. Sonst nix.
Gruß
Cjreek
-
Hallo Leute,
vielen Dank für eure Hilfe! Ich hab es verstanden. :-)
void