Entwickler-Ecke
Windows API - mit Assembler auf CPU zugreifen unter XP
Jan@BTH - Mi 12.02.03 15:11
Titel: mit Assembler auf CPU zugreifen unter XP
Hi,
vielleicht kann mir hier jemand weiter helfen. Wenn ich mit Assemblercode die CPU anspreche bekomme ich unter XP die Fehlermeldung 'Privilegierte Anweisung'. Warum??? :roll:
Alibi - Mi 12.02.03 15:36
Weil NT nicht zulässt, dass du direkt auf die Hardware zugreifst. :)
Jan@BTH - Mi 12.02.03 15:42
und wie kann ich das umgehen?
Delete - Mi 12.02.03 15:46
Einen Treiber schreiben, aber nicht mit Delphi. Das geht nur mit Visual C und dem Visual Studio.
Jan@BTH - Mi 12.02.03 15:56
Danke Euch, aber das übersteigt meine Fähigkeiten. . . :lol:
Delete - Mi 12.02.03 16:06
Wozu willst du den die CPU direkt ansprechen?
Jan@BTH - Mi 12.02.03 16:14
wollte die LPT ansprechen. . . :?
Delete - Mi 12.02.03 16:19
Um Ports anzusprechen mußt du mal bei Torry kucken. Die haben da bestimmt Komponenten für. Denen wird eine Treiber-DLL beiliegen die über die Komponente gekapselt wird.
Jan@BTH - Mi 12.02.03 16:22
Danke erst mal. Propiere es aus und melde mich dann noch mal.
:idea:
Bryce - So 16.02.03 08:27
Titel: System umgehen?
Aber es muss doch irgendwie möglich sein am System vorbei die Hardware anzusprechen. Schließlich könnte man doch bestimmte Dinge - was die Geschwindigkeit angeht - optimieren, wenn man das ganze nicht über das System, sondern direkt macht. Mir fällt da zwar nichts Konkretes ein (außer z.B. ohne OpelGL/DirectX direkt die Grafikhardware anzusprechen), aber so im Prinzip könnte das ja mal ganz sinnvol sein.
Sven - So 16.02.03 12:08
Grundsätzlich es den Benutzeranwendungen auf NT-Systemen nicht erlaubt direkt auf die Hardware zuzugreifen. MS hat da aber ein Hintertürchen offen gelassen. Benutzeranwendungen laufen auf dem sogenannten Ring 3, und Systemprogramme usw. auf Ring 0. Ring 1 und 2 sind nicht belegt. Um mit einer Benutzeranwendung direkt auf die Hardware zuzugreifen muß im Programm auf Ring 0 umgeschaltet werden. Ich habe da einen Quelltext der dies tut. Dieser ist allerdings in C. Deshalb habe ich mich damit nicht weiter beschäftigt.
Gruß Sven
XtrmK3v0r - Mo 03.03.03 21:13
Hi Sven! Könntest du mir eventuell mal diesen C Source schicken?
Ich habe da so ein ähnliches Problem, zwar will ich nicht direkt auf die Hardware zugreifen aber es handelt sich dabei um eine API Funktion die dann auf den Arbeitsspeicher zugreift.Um genau zu sein ReadProcessMemory. Diese geht unter Windows Xp einfach nicht! Unter Windows 9x funktioniert sie perfekt...
Delete - Mo 03.03.03 22:06
Das hat nichts mit dem Thema zu tun. Zu mindest ist die Ursache nicht hier zu suchen.
XtrmK3v0r - Mo 03.03.03 23:26
Weisst du eventuell an was das liegen könnte? Ich bin schon am verzweifeln
AndyB - Mo 03.03.03 23:34
Auch wenn es jetzt nicht zum Thema gehört.
Kann es sein dass der Prozess, auf den du mit ReadProcessMemory zugreifen willst mit höheren (Benutzer)Rechten läuft. Z.B. Prozess 1: SYSTEM, Prozess 2: Benutzer. Prozess 2 kann nicht auf Prozess 1 zugreifen. Andersherum geht es schon.
XtrmK3v0r - Mo 03.03.03 23:38
Nun ja ich hatte mein eigenes Programm auf höchste Priorität gestellt High bzw Realtime und wollte dann auf einen Prozess zugreifen der mittlere Priorität hatte. Aber die Funktion gibt immer wieder false zurück. Wie gesagt ich hab das ganze mal unter Windows ME und 98 getestet und da gab es keine Probleme.Deshalb dachte ich mir eben das es vielleicht mit irgend welchen Privilegien zu tun haben könnte!
Delete - Mo 03.03.03 23:41
Die Priorität hat nichts mit den Rechten zu tun. Hat nur was mit der Zuteilung der Rechenzeit an den Prozessor zu tun.
XtrmK3v0r - Mo 03.03.03 23:44
Aber theoretisch muss es doch auch unter XP gehen. Was mich ja auch so gewundert hatte war das z.B dieser Memory Dumper Pro den es kostenlos zum Download gibt auch nur bis ME läuft, nicht jedoch unter NT/XP
AndyB - Mo 03.03.03 23:47
XtrmK3v0r hat folgendes geschrieben: |
Aber theoretisch muss es doch auch unter XP gehen. |
Nicht nur theoretisch. Das geht auch praktisch. Aber eben mit der Einschränkung, dass ein Prozess mit weniger Privilegien (Rechten) nicht auf einen mit höheren Zugreifen kann. Wäre dies nicht so, so bräuchte man gar keinen Administrator mehr, denn jeder Benutzer (der auch noch Viren ausführt) könnte dann das System zuerschießen.
XtrmK3v0r - Mo 03.03.03 23:55
Okay jetzt bin ich verwirrt. Luckie sagt es habe nichts mit Rechten zu tun und du meinst wiederrum es hat damit zu tun. Was stimmt nun? Und wenn ja wie setz ich das code-mäßig um? :roll:
Delete - Di 04.03.03 00:05
Wenn du sagst, du hättest dem Prozess die höchste Priorität zugewiesen, dann habe ich das so verstanden, als wenn du die Prozessor-Priorität meinst. Als mit SetPriorityClass gearbeitet hättest.
XtrmK3v0r - Di 04.03.03 00:08
Jaja richtig! Ich hab meine Anwendung mit SetPriorityClass auf Realtime gestellt und hab dann versucht auf einen Prozess zuzugreifen mit normaler Priorität -> klappt unter me, nich aber unter xp...das spielt mir mal wieder ein streich...
Delete - Di 04.03.03 00:11
Noch mal zum Mitschreiben: Mit welcher Prozessor-Priorität die Prozesse laufen spielt keine Rolle!
XtrmK3v0r - Di 04.03.03 00:24
Das war ja auch nich meine Idee. Aber fakt is, dass mir das alles nicht weiterhilft. Ich brauch eine Lösung! Für irgendwelche Vorschläge wäre ich sehr dankbar!
Addy - Do 06.03.03 15:15
Du kannst mit ReadProcessMemory nicht auf Systemprozesse zugreifen und das ist auch gut so.
XtrmK3v0r - Do 06.03.03 15:42
Nein das stimmt nicht! Man kann sogar auf den Speicher eines Systemprozesses zugreifen, nur kann ich unter Xp nicht mal auf normale zugreifen und das ist ja das was mich so verwundert!
Allgemein unterscheidet sich windows9x/me in vielerlei hinsicht von xp...ich muss mich wahrscheinlich erstmal mit dem memory management von windows xp beschäftigen...vielleicht find ich raus wie ich mir zugriff zum Speicher der Prozesse beschaffen kann.
Addy - Do 06.03.03 17:28
Tatsächlich? Das ist aber ein ganz schönes Sicherheitsrisiko (zumindest, wenn man auch schreiben kann).
XtrmK3v0r - Do 06.03.03 18:56
Wobei ich sagen würde das das Modifizieren von Daten innerhalb der Systemprozesse nur zum Absturz führen würde. Und ehrlich gesagt glaub ich auch nicht das man per Internet auf die Prozesse eines anderen PC's zugreifen kann, ich hab jedenfalls sowas noch nie gesehn und das wäre dann schon eine erhebliche Sicherheitslücke :d da hast du recht. Aber auf jedenfall kann man den Speicher des eigenen PC's sprich den RAM beliebig verändern.Und wenns nich mit API Funktionen klappt dann muss Assembler ran :D Aber ich denk ma auch da hat XP eine Schutzsperre...ich glaub das war ja hier das Hauptthema dieses Threads :D
Addy - Fr 07.03.03 19:28
Ich dachte auch nicht an Netzwerke, sondern an Viren, die einen Userprozess infizieren und so die Systemprozesse des lokalen Computer anzapfen (aber, wie du gesagt hast, erfordert dies eine seeehhhr genaue Kenntnis der Speicherstruktur des OS).
Moderne OS, die (bei PCs) für den 386+ geschrieben wurden (z.B. Linux, Windows NT+, Win95+) laufen im Protected Mode, der, wie der Name schon sagt, erhebliche Schutzmechanismen erlaubt, da das OS den Prozessor zu großen Teilen steuert und kontrolliert (Stichworte Cpu-Exceptions und Memory Managment).
Aus diesem Grund macht es effektiv keinen Unterschied, ob du Assembly-Code benutzt oder API-Routinen. Denn um in das Memory Managment einzugreifen, muss der Code unter System-"Privilege Level" laufen, und den hat halt nur das System :wink:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!