Autor Thema: Fs, Ds  (Gelesen 10275 mal)

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« am: 15. August 2004, 14:52 »
hi,

ich bin mir sicher, dass das eine entsätzlich dumme frage ist, aber wozu wird soetwas unter windows ring0 gemacht:

MOV  EAX,00000030h
MOV  FS,AX
mov eax,23h
mov ds,ax

also was befindet sich in diesen segmenten (fs=30,ds=23)?

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #1 am: 15. August 2004, 14:59 »
Woher sollen wir das wissen? Jeder kann sich im Protected Mode die Segmente sonstwie belegen, im Realmode wäre da nix besondres. Aber im PM wäre 23h irgndwie seltsam, wäre ja dann DPL 1 und in der LDT hm keine AHnung was das heisst, wenn wir die GDT usw nicht kennen. Also von daher die Frage ist nicht dumm, sie ist nur nicht zu beantworten, oder ich übersehe was ^^
Anyway ich begrüss dich mal als neues Member hier;)
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 15. August 2004, 15:32 »
ich hätte noch schreiben sollen, dass ich den code aus einer interrupt handler routine (int 1, debug interrupt) für windows 2k/xp habe

macht das jetzt mehr sinn, oder ist das praktisch willkürlich und könnte auch weggelassen werden?

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #3 am: 15. August 2004, 15:41 »
Bringt mir ehrlich gesagt auch nix, da ich nicht weiss was in der GDT von Windows drinsteht
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #4 am: 15. August 2004, 17:45 »
Interrupt-Handler unter NT?

Hast du etwa den NT-Kernel disassembliert oder was?

The-Programmerfish

  • Beiträge: 434
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. August 2004, 17:54 »
Naja, es ist zwar illegal, aber irgendwo (Chip glaub ich) stand mal dass bei irgendeiner Firma mit Windows-Quellcode Lizenz durch ein Sicherheitsleck der Source von Windows 2000 und NT entwendet wurde und seit dem bei diversen Tauschbörsen zu finden ist. Natürlich will ich unseren Freund hier ja nicht irgendwie damit belasten, ich wollts nur mal loswerden.
<- Verhasst, Verdammt, Vergöttert

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 15. August 2004, 18:10 »
nee, is nich orginal nt kernel code

sondern nen nicht-microsoft int1 handler code

und der funktioneirt auch ganz gut ohne das DS, FS setup

allerdings klemmts immernoch irgendwo

mal ne andere frage
wie sieht eigentlich der stack bei aufruf eines int handlers aus?
hat da mal jemand n link zu?

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #7 am: 15. August 2004, 19:29 »
Also geht das nur mir so oder wird hier noch jemand absolut nich aus seinen Fragen schlau?
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 15. August 2004, 19:54 »
naja, ich kam zu der frage, weil in meinem ominösen int1 handler code is, der weit oberhalb vom aktuellen ESP werte manipuliert

wahrscheinlich landet wie bei einem call irgendeine return addr aufm stack, die nachm iret dann irgendwie weiterverwendet wird

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #9 am: 15. August 2004, 20:36 »
Ja das mit dem Win2K-Source hab ich auch gehört, aber orp meint hier was anderes...

@Roshl

Also so richtig versteh ich ihn auch nicht ^^

Also nochmal: was ist das für ein Code? Wie bindest du ihn ein? In was für eine Art Programm?

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 15. August 2004, 20:51 »
also was mittlerweile funktioniert ist folgendes:

ein windows2k/xp treiber, der die IDT für int1 verbiegt, und auf meinen int1 handler zeigen lässt.

ich will sozusagen int1 hooken.

unter bestimmten bedingungen rufe ich den orginal int1 handler auf, manchmal mache ich aber auch nur meinen eigenen kram.

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #11 am: 15. August 2004, 20:57 »
Ok, jetzt wird mir einiges klar.

1. Was genau funktioniert nicht? / Was passiert?
2. Funktioniert der Original-Handler?

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 15. August 2004, 21:28 »
also int1 hooken, und exception resetten usw funktioniert nach zirka 1000 bluescreens ganz gut

die restlichen pitfalls krieg ich noch so hin, hoffe ich mal
wenn nich, hab ich ja jetzt nen cooles forum zum nerven :)

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 15. August 2004, 22:04 »
Hi,

also der Selektor 0x23 (genauer gesagt der 0x20 und RPL=3, oder so) ist ein Data-Selektor (RW) mit Basis=00000000, Limit=000fffff und DPL=3.
Der Selektor 0x30 ist schon spannender: Basis=ffdff000, Limit=00000001, und DPL=0. Und wieder Data (RW). Was das sein soll, weiss ich nicht. Sieht aber nett aus.
Quelle: Powerpoint-Präsentation: Operating Systems Case Study Windows 2000 (NT) von Greg O'Shea, Microsoft Research. 22 Februar 2000 (Google könnte helfen.)

MfG PorkChicken
Dieser Text wird unter jedem Beitrag angezeigt.

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #14 am: 16. August 2004, 18:11 »
Limit 1? dann hätte das ja bei gesetztem Granularbit 4KB bei nicht gesetzten 1 Byte wer brauch denn sowas?
Die Beschreibung zu dem 0x23 erscheint mir so wie du sie hast wenig sinnvoll und zwar weil: Wenn ich Basis und Limit mal zusammennehme gehe ich einfach mal davon aus dass der Deskriptor den ganzen Speicherraum umfasst. So wenn dann aber nur DPL 3 ist und auch noch Lese und Schreibrechte gelten würde das ja heissen das jedes beliebige Proggi einfach alles umschreiben kann!! (Würde bei Windows zwar einiges erklärn aber so blöd sind selbst die nich) Irgendwie kann da was nicht stimmen.
By the Way meinst du IRQ 1? Dann würdest du ja den TastaturIRQ umbiegen. Wozu? Oder meinst du wirklich Int 1 das wäre eine Exception. Noch grösseres Wozu?
Achso und bei einem Int wird im Protected mode der Selektor und die relative Adresse auf den Stack gepusht, damit auch wieder zurückgefunden werden kann. Im Prinzip wie bei einem normalen ret nur das bei iret das Interruptflag noch verändert wird.
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 16. August 2004, 21:45 »
Tja, was Limit 1 sein soll, weiss ich auch nicht.

Das mit Basis=0, Limit=4GB ist durchaus richtig, weil ja immer noch das Paging aktiviert ist, was das Herumgeschreibe in fremden Speicherbereichen verhindert. Wenn du mal bei einer normalen Windowsanwendung dir DS, ES und SS ausgeben lässt, steht in denen übrigens auch 0x23.
Dieser Text wird unter jedem Beitrag angezeigt.

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 16. August 2004, 22:21 »
segment 30h sieht unter windows2000 heutzutage so aus (meint zumindest softice):

Type:Data: Read-Write
Address: ffdff000
Limit: 1fff
DPL: 0
Granularity: Page
Present: P

was da drin stattfindet, weis ich allerdings immernochnicht, aber weil mein code auch ohne FS=30h funktioniert, is das nichmehr so wild

int1 issn intel hardware interrupt, der bei debug exceptions aufgerufen wird:

;    The processor triggers this exception for any of the following
;    conditions:
;
;    1. Instruction breakpoint fault.
;    2. Data address breakpoint trap.
;    3. General detect fault.
;    4. Single-step trap.
;    5. Task-switch breadkpoint trap.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 17. August 2004, 01:10 »
so ich hab mehr herausgefunden, was es mit dem Selektor 30h auf sich hat. Es hat laut meiner neuen Quelle, wirklich das Limit 1fff (und nicht 1) und zeigt auf die processor control region (PCR). Was auch immer das sein soll.

Ach ja meine Quelle:
comp.lang.asm.x86
Da stehen auch noch ein paar andere interessante Selektoren beschrieben.
Dieser Text wird unter jedem Beitrag angezeigt.

orp

  • Beiträge: 10
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 19. August 2004, 00:30 »
FYI, der stack bei einer exception ohne priv wechsel sieht so aus

 ________
| EFLAGS
| CS
| EIP
| ERROR CODE (nicht bei allen ints)
v


(weil ich das gefragt hatte, und niemand replyed hatte)

 

Einloggen