Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit assembler
pc-crack - So 15.11.09 12:23
Titel: Problem mit assembler
Ich möchte auf dem LPT Port zugreifen.
Das mach mit einem Treiber der in 378h liegt.
dazu hab ich eine Demo gefunden das auch läuft aber wenn ich den Code selber compiliere kommt immer bei "Out dx,ax" immer die Meldung "Privilegierte Anweisung".
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure LptWrite(Addr: word; Maske: word); begin Maske:= (Maske* 256)+Maske; asm Mov ax,Maske Mov dx,Addr Out dx,ax end; end; |
alzaimar - So 15.11.09 12:29
Unter Windows Darfst Du das nicht. Du musst einen Treiber verwenden oder selbst einen schreiben. Und das ist einer der Nachteile von Delphi: Treiber schreiben is nich weil geht nich.
pc-crack - So 15.11.09 12:37
aber das schon compilierte Programm kann es ja auch machen.
BenBE - So 15.11.09 13:23
Es gibt bei x86-basierten (und auch AMD64-Systemen), sowas, das nennt sich Protected Mode, im Gegensatz zu sowas, was sich Real Mode schimpft.
Im Protected Mode läuft deine Anwendung, im Real Mode startet z.B. DOS.
Unterschied (kurz, damit kann man nämlich ganze Regale füllen):
- Im Realmode wird der Speicher anders gehandhabt und Geräte sind i.d.R. im Speicher eingeblendet (Memory Mapped IO).
- Im Protected Mode ist nur der Speicher sichtbar, auf den ein Prozess zugreifen darf. Hardware wird hier oft verborgen (ODER kontrolliert eingeblendet z.B. für Grafikanwendungen)
Beim Protected Mode gibt es zwar noch verschiedene Schutzmodi (Ring 0 bis 3), die angeben, wieviel ein Prozess, der in diesem Modus läuft darf. Windowsanwendungen laufen typisch in Ring 3 (User-Mode), während Treiber im Ring 0 (Kernel Mode) laufen. Das sich hier auch noch mal das Memory Management ändert, steht NOCHMAL auf einem anderen Blatt.
Und zu der Anwendung von dir, die das kann: Die geht sicherlich über die WinAPI ODER holt sich über CreateFile die Treiber-Schnittstelle (z.B. \\.\LPT1) für das Gerät. Außerdem: 378h war IIRC nicht LPT, sondern COM ;-)
pc-crack - So 15.11.09 14:43
naja ich will euch nicht widersprechen aber
Delphi-Quelltext
1: 2: 3: 4:
| constructor TLptComp.Create(AOwner: TComponent); begin SetLpt(1); end; |
wurde nicht aufgerufen und daher wurde kein LPT Port gesetzt was dazu für das versucht wurde auf h000 zu schreiben.
Flamefire - Mo 16.11.09 15:48
richtige variante wäre über die winAPI mit Createfile zu gehen.
alternativ kann man sich unter WXP mittels uallRing0 auch vom Usermode in den kernel "hacken"
funktioniert sehr gut, aber auch sehr gefährlich, wenn man nicht weiß was man macht!
am besten selbst nen treiber erstellen mittels WDK und C
BTW: du hast geschrieben, das die Demo läuft?
dann zeig mal bitte die Demo.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!