Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Inline Assenbler] LDT Base / Limit - Programmabsturz (https://www.delphipraxis.net/99695-%5Binline-assenbler%5D-ldt-base-limit-programmabsturz.html)

Zacherl 16. Sep 2007 10:21


[Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Hey,

ich versuche die LDT Base und das LDT Limit über inline Assembler zu ermitteln. Folgenden Code habe ich gefunden:

Delphi-Quellcode:
asm
  sgdt fword ptr [gdtr]
  sldt [ldtr]
  mov eax, dword ptr[gdtr+2]
  mov [gdt],eax                // GDT Base

  movzx ebx, word ptr [ldtr]
  and bl,11111000b
  add ebx,eax                  // Addr. des LDT Deskriptors

  mov ax,[ebx]
  mov [ldt_limit],ax           // LDT Limit (die unteren 16 bits reichen)

  mov ah,[ebx+7]
  mov al,[ebx+4]
  shl eax,16
  mov ax,[ebx+2]
  mov [ldt],eax
end;
Dieser lässt sich allerdings nur bis mov ax,[ebx] ausführen. Danach verabschiedet sich das Testprogramm ohne jedliche Exception.

Hat jemand ne Idee woran das liegen könnte?

Gruß

sirius 16. Sep 2007 16:43

Re: [Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Also mit der/den Desciptor table habe ich noch nie gearbeitet.
Aber:
1. Darfst du überhaupt so ohne weiteres auf die Register zugreifen?
2. Wo bist du eigentlich grade? Ich würde jetzt auch frei behaupten, im User-Modus bzw. in deinem Anwenderprogramm kommst du nicht auf die Tabellen.
==> in ebx steht anscheinend nix sinnvolles, bzw. nichts sinnvolles für deinen virtuellen Addressraum. Es sollte als eine AV kommen. Ich wies ja nicht, was du für ein Programm schreibst, hast du überhaupt Exceptionbehandlung?

Christian Seehase 16. Sep 2007 16:47

Re: [Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Moin Zacherl,

Zitat:

Zitat von Zacherl
Folgenden Code habe ich gefunden:

und wo hast Du den gefunden?

Zacherl 16. Sep 2007 21:05

Re: [Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Hier habe ich den gefunden: https://www.buha.info/board/showthre...8&page=2&pp=15
Da steht auch, dass er eventuell nicht unter WinNT Systemen funktionieren wird.

Muetze1 16. Sep 2007 21:11

Re: [Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Zitat:

Zitat von Zacherl
Da steht auch, dass er eventuell nicht unter WinNT Systemen funktionieren wird.

Das hast du ja nun eindeutig bewiesen...

Zacherl 16. Sep 2007 21:28

Re: [Inline Assenbler] LDT Base / Limit - Programmabsturz
 
Das Problem ist folgendes: Ab NT wird die LDT eigentlich nicht mehr verwendet, damit ist auch der Descriptor in der GDT nicht mehr vorhanden.
Man könnte doch jetzt aber prüfen, ob der Descriptor vorhanden ist und dann die Base und das Limit der LDT ermitteln. Fals nicht vorhanden wird halt 0 zurückgegeben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz