Autor Thema: Frage zu Segmentregistern  (Gelesen 3569 mal)

void

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« 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

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #1 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
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 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. In dieser Datenstruktur sind ein paar Informationen über den aktuell laufenden Thread gespeichert.
Dieser Text wird unter jedem Beitrag angezeigt.

void

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #3 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? :?

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 14. July 2009, 22:28 »
Jop
Dieser Text wird unter jedem Beitrag angezeigt.

void

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 14. July 2009, 22:37 »
Was geht in der zweiten Zeile vor sich?

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #6 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
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

void

  • Beiträge: 4
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 15. July 2009, 00:09 »
Hallo Leute,

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

void

 

Einloggen