Forum > Componenti Aggiuntivi

Accesso diretto alla CPU in HARDWARE

(1/2) > >>

DragoRosso:
Vi siete mai chiesti quali sono, dove e come accedere ai registri hardware della CPU ?
Ai miei tempi era semplice, l'accesso all'hardware era diretto, ma con l'avvento dei sistemi virtualizzati o meno basati sul kernel e sui RING (livelli si sicurezza hardware), ciò non è stato più possibile.

Ma molti tool visualizzano dati che non sono disponibili ai normali programmi, molti di questi richiedono un accesso privilegiato per evitare usi abusivi.

Quello che vi propongo oggi invece è uno strumento (purtroppo per i linuxiani è solo per Windows) che consente di accedere direttamente all'hardware di tutta la CPU, senza privilegi durante l'uso.

Io lo uso da una vita per controllare la temperatura del package della CPU ed eventualmente apportare le opportune modifiche / avvisi / .... nei software che sviluppo.

Il tutto si compone di due parti, uno è un driver kernel Windows firmato, l'altro è il wrapper pascal al driver (l'esempio che vi porto è limitato all'uso che ho indicato, ma siete liberi di sbizzarirvi).

Attenzione che si possono fare danni, in particolare il servizio è comunque a tutto il sistema WINDOWS di qualunque utente, e quindi può essere soggetto ad usi abusivi da parte di altri software / persone.

Comunque l'uso è semplicissimo e può portare dei "pro" ad diversi "softweristi".

Andiamo a vedere i dettagli:

N.B.: per lo scompattamento usate un 7-ZIP o altro, non l'explorer di windows in quanto marca i file come "dubbi".

1) Uno zip contenente il driver e la licenza d'uso. Potete scompattarlo in una qualsiasi directory, poi usate i "cmd" inclusi CHE DEVONO ESSERE FATTI GIRARE con i privilegi elevati. In particolare "Install.cmd" installa il drive in partenza auotmatica con il sistema operativo, da qui in poi l'avrete sempre a disposizione senza usare più privilegi elevati. PRIMA DI ESEGUIRE IL FILE INSTALL.CMD DOVETE EDITARE LO STESSO E PORRE il valore di "binPath=" uguale alla directory (disco compreso) dove avete scompattato lo zip.

2) Il wrapper.

3) L'esempio d'uso è indicato il questo post.

Crete un nuovo progetto Lazarus, inserite nelle Uses il wrapper in allegato
Inserite un BUTTON.
Generate gli eventi FormCreate, FormClos, ButtonClick e sovrascrivete il codice postato.

N.B.: DAL WRAPPER ho volontariamente tolto la funzionalità di scrittura dei registri CPU, in quanto può ipoteticamente generare danni hardware in alcune serie di CPU Intel (scrittura di alcuni registri per la gestione energetica).


--- Codice: ---
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  CLoseAction := caFree;
  ChiudiMsr;
end;

procedure TForm1.Button1Click(Sender: TObject);
var p: UInt64;
begin
  //Leggi temperatura del package CPU serie 12 !!!!
  if LeggiMsr($01b1, 0, p) then
    begin
      Button1.Caption := (100 - Word((p and ($7F0000)) shr 16)).ToString+' °'; //Temperatura package per CPU Intel serie 12
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ApriMsr;
end;

--- Termina codice ---

Per chi vuole sbizzarirsi con la manualistica Intel, questo è il sito: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html

Consiglio:

(dovrete cercare la manualistica del vs. processore)
12th Generation Intel Core Processor Family - Vol 1.pdf
12th Generation Intel Core Processor Family - Vol 2.pdf
12th Generation Intel Core Processor Family - Updates.pdf

e quello generico e mastodontico

Intel® 64 and IA-32 Architectures.pdf (cinquemlia pagine circa .... 8) )
Ciao e buon divertimento.

doc:
Interessante.... :o
Mi sta palesando l'idea di usarlo per far sì che un mio programma modifichi, da sè, il moltiplicatore della CPU.

Comunque, ottimo post DragoRosso, si vede che ne sai.

DragoRosso:
A proposito, i commenti parlano della serie 12 Intel, ma quella funzione è disponibile in tutte le serie "Intel Core" dalla "Second Generation" chiamata Sandy Bridge (stiamo parlando degli anni 2011).


--- Citazione da: doc - Maggio 18, 2023, 09:10:29 pm ---Interessante.... :o
Mi sta palesando l'idea di usarlo per far sì che un mio programma modifichi, da sè, il moltiplicatore della CPU.

--- Termina citazione ---

 :o  :o  :o ;D

bonmario:

--- Citazione da: DragoRosso - Maggio 17, 2023, 03:58:50 pm ---Vi siete mai chiesti quali sono, dove e come accedere ai registri hardware della CPU ?

--- Termina citazione ---

L'ultima volta che l'ho fatto, avevo ancora il mio primo PC: un 80286 della Olivetti ... potrei avere ancora il sorgente in qualche backup !!!
Naturalmente, all'epoca usavo il Turbo Pascal !

Ciao, Mario

doc:
Mi sorge un dubbio.....DragoRosso.
Tu che ne sai una in più del diavolo: ma funziona anche per accedere ai registri di una CPU AMD Ryzen PRO 6000 Series Processors?

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa