Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: void am 14. July 2009, 21:49

Titel: Frage zu Segmentregistern
Beitrag 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
Titel: Re: Frage zu Segmentregistern
Beitrag von: chris12 am 14. July 2009, 21:56
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
Titel: Re: Frage zu Segmentregistern
Beitrag von: Jidder am 14. July 2009, 21:58
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.
Titel: Re: Frage zu Segmentregistern
Beitrag von: void am 14. July 2009, 22:22
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? :?
Titel: Re: Frage zu Segmentregistern
Beitrag von: Jidder am 14. July 2009, 22:28
Jop
Titel: Re: Frage zu Segmentregistern
Beitrag von: void am 14. July 2009, 22:37
Was geht in der zweiten Zeile vor sich?
Titel: Re: Frage zu Segmentregistern
Beitrag von: Cjreek am 14. July 2009, 22:57
Hi,

Naja in der zweiten Zeile wird das was an Adresse

0x7FFDD000 + 0x30 = 0x7FFDD030

steht ins eax geladen. Sonst nix.

Gruß
Cjreek
Titel: Re: Frage zu Segmentregistern
Beitrag von: void am 15. July 2009, 00:09
Hallo Leute,

vielen Dank für eure Hilfe! Ich hab es verstanden. :-)

void