Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Assembler im Kernel-Mode (https://www.delphipraxis.net/69978-assembler-im-kernel-mode.html)

Codewalker 23. Mai 2006 06:36


Assembler im Kernel-Mode
 
Hallo zusammen.

Ich möchte gerne bei meinem Rechner die Leistung verringern indem ich ein HALT-Kommando an die CPU sende.

Delphi-Quellcode:
asm
  HLT ; thx to Frickel[...]TM
end;
In diesem Thread habe ich schon erfahren, dass dies wohl ein privilegiertes Kommando ist und nur aus Ring0 (= Kernel) gesendet werden kann und wurde dabei auf die uAllCollection verwiesen. Leider hat mir das nicht wirklich weitergeholfen. Kennt sich jemand mit der uAllCollection aus oder kann mir sagen, wie ich das realisieren kann? :gruebel:

Muetze1 23. Mai 2006 07:19

Re: Assembler im Kernel-Mode
 
Wozu nur? Der Idle Prozess (auch wenn es ja kein richtiger ist), der versetzt die CPU doch schon immer mit den Halt Kommandos in den Suspend, somit ist die Frage was du damit bezwecken willst? Mach einfach gar nix und du erreichst das gleiche...

Auch ist die Frage des reaktivierens aus dem Modus. Im Normalfall holt nur ein Hardwareereignis die CPU aus dem Halt Zustand wieder raus - wie willst du die denn bedienen bzw. programmieren?

Codewalker 23. Mai 2006 10:32

Re: Assembler im Kernel-Mode
 
Mein Ziel ist es, die Temperatur wieder zu reduzieren, sobald sie einen bestimmten Schwellwert überschritten hat. Soll für ein unbeaufsichtigtes System sein.

Muetze1 23. Mai 2006 10:54

Re: Assembler im Kernel-Mode
 
Mit anderen Worten: Wennn die Temperatur überschritten wurde, setzt du die Priorität der anderen laufenden Prozesse runter, so dass der Idle-Task wieder mehr Prozessorzeit bekommt und damit die CPU kühler wird.

Du hast einen deutlichen Aufwand deinen Weg überhaupt zu implementieren. Zum einen arbeitest du dort auf der höchsten Ebene im Kernelbereich - ein kleiner Fehler und das System ist wech. Du musst detaillierte Kenntnisse über die Vorgehensweise des Systems in dem Bereich haben und zum anderen auch die Kenntnisse über die Auswirkungen des Halt Befehls. Auch musst du aufpassen und wissen was du tust, da du Hardwarezugriffe durchführst, welche wieder anderen Elementen missfallen könnten.
Auch ist die Frage, ob du mit Delphi in den Bereichen überhaupt noch _vernünftig_ arbeiten kannst.

Codewalker 23. Mai 2006 11:02

Re: Assembler im Kernel-Mode
 
Ich möchte es zumindest versuchen. Alllerdings glaube ich, dass ich etwas
Starthilfe brauche, weil ich nicht weiß, wie ich den Befehl in Kernel-Ebene abgebe. Was muss ich dazu in Delphi machen. Ich bin doch nicht der erste der das versucht. Hast vielleicht etwas Source for mich?

Vjay 23. Mai 2006 11:03

Re: Assembler im Kernel-Mode
 
@Muetze1
Nun eine andere Möglichkeit hat er aber auch nicht.

Er kann ja nicht seine Prozess-Priorität hochsetzen und dann sleep aufrufen, denn die abfallende Rechenzeit wird ja nicht dem IDLE-Prozess übergeben, sonden dem nächsten Programm, welches Rechenzeit anfordert.

Muetze1 23. Mai 2006 11:09

Re: Assembler im Kernel-Mode
 
Zitat:

Zitat von Vjay
Er kann ja nicht seine Prozess-Priorität hochsetzen und dann sleep aufrufen, denn die abfallende Rechenzeit wird ja nicht dem IDLE-Prozess übergeben, sonden dem nächsten Programm, welches Rechenzeit anfordert.

1. Wer sagt denn, dass er seine eigene hochsetzen soll? Dann würde der Idle Task nie zum Zuge kommen.
2. Die abfallende Rechenzeit wird dem nächsten Prozess zugeteilt - u.a. auch dem Idle Prozess. Und damit die anderen Prozesse nicht soviel Rechenzeit bekommen, diese in der Priorität herunter setzen.

Nach deiner Aussage würde der Idle Prozess nie Rechenzeit bekommen, weil nach deiner Aussage verteilt er keine Rechenzeit auf diesen. Wann würde dieser denn bei dir überhaupt zum tragen kommen?

@Codewalker:
Du kannst es gerne versuchen, aber ohne dich vorher vllt. ein halbes Jahr zum Kernel zu belesen und dann vllt. nochmal ein Vierteljahr zu Assembler, wirst du nicht weit kommen. Und Code Ausschnitte bringen dabei eh nix, wenn man nicht weiss, was sie machen und wie und in welchem Umfeld man sie abändern/einsetzen kann. Und in Delphi dies zu probieren - naja, da könntest du wirklich vielleicht der erste sein. Ansonsten gibt es hier fähige Leute im Forum die sich dazu bestimmt nochmal im Detail äussern können.

/EDIT: Nicknamen eingesetzt

himitsu 23. Mai 2006 11:11

Re: Assembler im Kernel-Mode
 
Zitat:

Mein Ziel ist es, die Temperatur wieder zu reduzieren, sobald sie einen bestimmten Schwellwert überschritten hat.
Hast du auch mal daran gedacht einfach die Kühlleistung raufzusetzen?

Am einfachsten einen temperaturgeregelten Kühler für 'ne stärkere CPU draufsetzen.

Frickeldrecktuxer_TM 23. Mai 2006 11:21

Re: Assembler im Kernel-Mode
 
@Codewalker: Warum willst du so ein Programm unbedingt selber schreiben? Je nachdem, welchen Prozessor du hast, gibt es deutlich effektivere Möglichkeiten als den HALT-State, und der wird unter NT-Systemen ohnehin benutzt, wenn gerade nichts zu tun ist. Und wenn etwas zu tun ist, sollte es auch getan werden, es ist nicht sinnvoll, möglicherweise wichtigen Prozessen einfach die Arbeitsgrundlage wegzunehmen.
Schau dir CPUCool an. Das unterstützt auch die effektiveren Kühlmodi, taktet deinen Prozessor auch temperaturgeregelt runter und ist wirklich sein Geld wert.

Olli 23. Mai 2006 11:35

Re: Assembler im Kernel-Mode
 
Assembler sollte im Kernelmode nicht benutzt werden. Nichtmal IN und OUT sollten direkt in Form der Assemblerbefehle benutzt werden. Dies hat nicht nur praktische Bedeutung (Portabilität dank HAL) sondern ist auch eine Sicherheitsfrage, genau wie die, daß im Kernelmode keine FP-Operationen verwendet werden sollen.

Wir brauchen hier auch garnicht diskutieren, ob irgendwelche Hacker in irgendwelchen e-zines schonmal gezeigt haben, daß man Assembler benutzen kann, denn das ist nicht die Frage. Die Frage ist, ob man ihn benutzen darf. Im Gegensatz zu 9x/Me, wo man anfänglich jeden Treiber fast ausschließlich in Assembler schrieb, rät MS für NT-Systeme genauso ab, wie andere Experten in Treiberfragen (zB OSR).

Zitat:

Zitat von Peter Viscarola (OSR)
DON'T EMBED ASSEMBLY LANGUAGE IN WINDOWS DRIVERS.

It's highly system specific, it's WAAAAAY too easy to THINK you know what you're doing ("it worked on DOS") but get an unexpected result (as in INT 1 versus INT 3), and it won't even compile in the x64 cross compiler.

It has NEVER been acceptable to use an INT 1 or an INT 3 or any other such convention in a Windows NT driver. Really.

[Quelle]

Ach ja, manchmal hat Assembler natürlich auch seine Bewandnis ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr.
Seite 1 von 4  1 23     Letzte »    

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