CPU Register auslesen und anzeigen

Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
¯\_(ツ)_/¯
Beiträge: 141
Registriert: 18.08.2017 09:35

CPU Register auslesen und anzeigen

Beitrag von ¯\_(ツ)_/¯ »

Moin, im anderen Thread habe ich gesehen dass man einen Wert in ein CPU Register setzen kann.
Es gibt mehrere CPU Register...
-AX
-BX
-CX
-DX
-SI
-DI
-BP
-SP
-CS
-DS
-ES
-SS
-IP
Und andere wie EAX, RAX und was weiss ich noch alles. :D
Setzen mit MOV kann man ja wie ich gesehen habe aber kann man alle CPU Register auslesen und den Wert im PB Fenster anzeigen?
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: CPU Register auslesen und anzeigen

Beitrag von STARGÅTE »

Ist im PB Debugger integriert:


The Assembly Debugger
Bild

PS: AX, EAX, RAX sind alle die selben Register nur halt 16bit, 32bit, 64bit
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: CPU Register auslesen und anzeigen

Beitrag von Josh »

Befehl ist im anderen Thread im Code enthalten ;)

ShowAssemblyViewer()

Wenn du das Register in eine Variable auslesen willst, dann geht das genau so mit MOV wie beim setzen, nur musst du das Register und die Variable vertauschen.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: CPU Register auslesen und anzeigen

Beitrag von juergenkulow »

Hallo ¯\_(ツ)_/¯ ,

hier ist eine Übersicht über die x64-Register: Intel x86-64 Architecture

und ein kleines Beispiel:

Code: Alles auswählen

CompilerIf #PB_Compiler_Processor<>#PB_Processor_x64
  CompilerError "x64 Code"
CompilerEndIf  
EnableASM
Define Reg_RAX
DisableDebugger ; Schalte Debugger aus, damit der Debugger die Register nicht verändet. 
IntQ(47.11)     ; Rufe IntQ mit 47,11 auf und gebe Ganzzahl in rax zurück.
MOV Reg_RAX,rax ; Speichere Inhalt von Register rax in Reg_RAX.
EnableDebugger
Debug Str(Reg_RAX)

; pbcompiler intq.pb /COMMENTED  
; erzeugt: 
; ; IntQ(47.11)
;   PUSH   qword [D1]
;   MOVSD  xmm0,qword [rsp]
;   ADD    rsp,8
;   CALL   PB_IntQ
; ; MOV Reg_RAX,rax
; MOV qword [v_Reg_RAX],rax

; in der intq.exe sieht das so aus:
; 0000000140001046 | FF 35 D4 1F 00 00                       | push qword ptr ds:[140003020]           |
; 000000014000104C | F2 0F 10 04 24                          | movsd xmm0,qword ptr ss:[rsp]           |
; 0000000140001051 | 48 83 C4 08                             | add rsp,8                               |
; 0000000140001055 | E8 C6 0F 00 00                          | call intq.140002020                     |
; 000000014000105A | 48 89 05 07 21 00 00                    | mov qword ptr ds:[140003168],rax        |
¯\_(ツ)_/¯
Beiträge: 141
Registriert: 18.08.2017 09:35

Re: CPU Register auslesen und anzeigen

Beitrag von ¯\_(ツ)_/¯ »

Ah verstehe danke Leute!
Die CPU Register sind doch global und einmalig oder pro Programm? Wenn ich in einer Schleife dauerhaft einen Register ausgebe und ein anderes fremdes Programm ändert zb RAX, kann ich den Wert auch bekommen bzw. ermitteln?
Bild
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: CPU Register auslesen und anzeigen

Beitrag von Mijikai »

¯\_(ツ)_/¯ hat geschrieben:Ah verstehe danke Leute!
Die CPU Register sind doch global und einmalig oder pro Programm? Wenn ich in einer Schleife dauerhaft einen Register ausgebe und ein anderes fremdes Programm ändert zb RAX, kann ich den Wert auch bekommen bzw. ermitteln?
Ist je Prozess verschieden.
Um rax in einem anderen Programm auszulesen benötigt man einen Debugger.
Dann entweder mit dem Debugger auslesen oder herausfinden wo rax gesetzt wird oder einen Hook setzen und dann manuell auslesen.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: CPU Register auslesen und anzeigen

Beitrag von mk-soft »

So geht das natürlich nicht.

Die Programme teilen sich Ressourcen der CPU und das OS kümmert sich darum wann und mit welchen CPU-Ressourcen, sowie Adressenbereich das Programm läuft. Somit ist es nicht ohne weiteres möglich in andere Programme zu schauen.
Jedes Programm erhält sogar seinen eigenen virtuellen Adressbereich im dem er läuft.
Somit ist eine Adresse im Programm nicht die reelle Adresse im Speicher des Rechners.

Des weiteren gibt es zum Beispiel in einem Quadcore 4 mal das RAX Register und Threading-Prozessoren sogar doppelt so viele...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: CPU Register auslesen und anzeigen

Beitrag von juergenkulow »

Hallo,

Code: Alles auswählen

; Gebe Register aus und beschäftige die CPU zu 100% mit zählen.
CompilerIf 0=#PB_Compiler_Thread
  CompilerError "Bitte Compiler-Optionen auf threadsicher stellen."
CompilerEndIf  
CompilerIf #PB_Processor_x64<>#PB_Compiler_Processor
  CompilerError "Source Code enthält x64-Register ASM-Befehle."
CompilerEndIf

Structure xwordTyp : low.q : high.q : EndStructure

Structure MyDatenTyp : 
  Regrax.q : Regrbx.q : Regrcx.q : Regrdx.q 
  Regrbp.q : Regrsp.q : Regrsi.q : Regrdi.q
  Regr8.q  : Regr9.q  : Regr10.q : Regr11.q
  Regr12.q : Regr13.q : Regr14.q : Regr15.q 
  Regxmm0.xwordTyp: Regxmm1.xwordTyp: Regxmm2.xwordTyp: Regxmm3.xwordTyp ; 
EndStructure

Procedure TestThread(*Daten.MyDatenTyp)
  Global xmm.xwordTyp
  DisableDebugger
  EnableASM
  Mov *Daten\Regrax,rax : Mov *Daten\Regrbx,rbx : Mov *Daten\Regrcx,rcx : Mov *Daten\Regrdx,rdx
  Mov *Daten\Regrbp,rbp : Mov *Daten\Regrsp,rsp : Mov *Daten\Regrsi,rsi : Mov *Daten\Regrdi,rdi
  Mov *Daten\Regr8 ,r8  : Mov *Daten\Regr9 ,r9  : Mov *Daten\Regr10,r10 : Mov *Daten\Regr11,r11
  Mov *Daten\Regr12,r12 : Mov *Daten\Regr13,r13 : Mov *Daten\Regr14,r14 : Mov *Daten\Regr15,r15
  !vmovups xword[v_xmm],xmm0 
  *Daten\Regxmm0\low=xmm\low : *Daten\Regxmm0\high=xmm\high
  !vmovups xword[v_xmm],xmm1 
  *Daten\Regxmm1\low=xmm\low : *Daten\Regxmm1\high=xmm\high
  !vmovups xword[v_xmm],xmm2 
  *Daten\Regxmm2\low=xmm\low : *Daten\Regxmm2\high=xmm\high
  !vmovups xword[v_xmm],xmm3 
  *Daten\Regxmm3\low=xmm\low : *Daten\Regxmm3\high=xmm\high
  Mov rax,$0
  Repeat
    Mov *Daten\Regrax,rax
    inc rax 
    DisableASM
  ForEver
  EnableDebugger
EndProcedure

Macro Anfuehrungszeichen
  "
EndMacro

Macro Ausgabe(Register) 
  AusgabeString.s=LSet(Anfuehrungszeichen#Register#Anfuehrungszeichen,5)
  For i=0 To Anzahl-1
    AusgabeString+Str(i)+":"+RSet(Hex(Feld(i)\Reg#Register,#PB_Quad),16,"0")+" "
  Next 
  Debug AusgabeString
EndMacro

Macro Ausgabexword(Register) 
  AusgabeString.s=Anfuehrungszeichen#Register#Anfuehrungszeichen+" "
  For i=0 To Anzahl-1
    AusgabeString+Str(i)+":"+RSet(Hex(Feld(i)\Reg#Register\high,#PB_Quad),16,"0")+
                  RSet(Hex(Feld(i)\Reg#Register\low,#PB_Quad),16,"0")+" "
  Next  
  Debug AusgabeString
EndMacro

Anzahl=CountCPUs(#PB_System_ProcessCPUs)
;Anzahl=16
Dim Feld.MyDatenTyp(Anzahl-1)
For i=0 To Anzahl-1
  CreateThread(@TestThread(),@Feld(i))
Next
Delay(500)
Ausgabe(rax) : Ausgabe(rbx) : Ausgabe(rcx) : Ausgabe(rdx)
Ausgabe(rbp) : Ausgabe(rsp) : Ausgabe(rsi) : Ausgabe(rdi)
Ausgabe(r8)  : Ausgabe(r9)  : Ausgabe(r10) : Ausgabe(r11)
Ausgabe(r12) : Ausgabe(r13) : Ausgabe(r14) : Ausgabe(r15)
Ausgabexword(xmm0): Ausgabexword(xmm1): Ausgabexword(xmm2): Ausgabexword(xmm3)
For j=1 To 25
  Ausgabe(rax)
  Delay(400)
Next 
Gesamt.q=0 
For i=0 To Anzahl-1 : Gesamt+Feld(i)\regrax : Next 
Debug "Gesamtergebnis der Zählung:"+FormatNumber(Gesamt,0) 
; offen Test Linux, MacOS, xmm4..15 
; rax  0:00000000226EBF64 1:0000000024E43A84 2:0000000022666E03 3:000000001DDA7377 4:000000001F9151A4 5:0000000021DCC38D 6:0000000022B7E1AB 7:000000001E0D7EF4 
; rbx  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; rcx  0:0000000000000057 1:0000000000000057 2:0000000000000057 3:0000000000000057 4:0000000000000057 5:0000000000000057 6:0000000000000057 7:0000000000000057 
; rdx  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; rbp  0:0000000001F01650 1:0000000001F01710 2:0000000001F017D0 3:0000000001F01890 4:0000000001F01950 5:0000000001F01A10 6:0000000001F01AD0 7:0000000001F01B90 
; rsp  0:0000000004B8FF20 1:0000000004C8FF20 2:0000000004D8FF20 3:000000000508FF20 4:000000000518FF20 5:000000000528FF20 6:000000000538FF20 7:000000000588FF20 
; rsi  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; rdi  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; r8   0:0000000000000001 1:0000000000000001 2:0000000000000001 3:0000000000000001 4:0000000000000001 5:0000000000000001 6:0000000000000001 7:0000000000000001 
; r9   0:0000000140042216 1:0000000140042216 2:0000000140042216 3:0000000140042216 4:0000000140042216 5:0000000140042216 6:0000000140042216 7:0000000140042216 
; r10  0:0000000000000020 1:0000000000080000 2:0000000000000002 3:0000000000000000 4:0000000000000001 5:0000000000000000 6:000000000000007E 7:0000000000000000 
; r11  0:0000000000000025 1:0000000000000013 2:0000000000000001 3:000000000508FDF0 4:00000000000002EC 5:000000000528FDF0 6:0000000000000000 7:000000000588FDF0 
; r12  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; r13  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; r14  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; r15  0:0000000000000000 1:0000000000000000 2:0000000000000000 3:0000000000000000 4:0000000000000000 5:0000000000000000 6:0000000000000000 7:0000000000000000 
; xmm0 0:00000000000000000000000000000000 1:00000000000000000000000000000000 2:00000000000000000000000000000000 3:00000000000000000000000000000000 4:00000000000000000000000000000000 5:00000000000000000000000000000000 6:00000000000000000000000000000000 7:00000000000000000000000000000000 
; xmm1 0:00000000000000000000000000000000 1:00000000000000000000000000000000 2:00000000000000000000000000000000 3:00000000000000000000000000000000 4:00000000000000000000000000000000 5:00000000000000000000000000000000 6:00000000000000000000000000000000 7:00000000000000000000000000000000 
; xmm2 0:00000000000000000000000000000000 1:00000000000000000000000000000000 2:00000000000000000000000000000000 3:00000000000000000000000000000000 4:00000000000000000000000000000000 5:00000000000000000000000000000000 6:00000000000000000000000000000000 7:00000000000000000000000000000000 
; xmm3 0:00000000000000000000000000000000 1:00000000000000000000000000000000 2:00000000000000000000000000000000 3:00000000000000000000000000000000 4:00000000000000000000000000000000 5:00000000000000000000000000000000 6:00000000000000000000000000000000 7:00000000000000000000000000000000 
; rax  0:00000000239663E6 1:0000000026008381 2:000000002343E15F 3:000000001EC4C149 4:00000000203F94A8 5:00000000230DFE11 6:0000000023E05A0E 7:000000001E6E120D 
; rax  0:000000003E79FACD 1:00000000403871D3 2:000000003A0F8D63 3:0000000036FEAFD8 4:00000000324A4635 5:000000003DD77295 6:000000003E7886A9 7:000000002CB4D084 
; rax  0:00000000591EC4BC 1:000000005ABECC65 2:0000000053EFA70E 3:000000004F16AFE1 4:000000004A231501 5:0000000058A62A7A 6:00000000591F3DD8 7:0000000043353607 
; rax  0:0000000073576D23 1:000000007520CA5B 2:000000006E16C36E 3:000000006721C34C 4:0000000061BB575E 5:0000000072F772BD 6:000000007362F381 7:0000000057E1548D 
; rax  0:000000008C7F645A 1:000000008E69692A 2:00000000873E92CB 3:000000007E6B514A 4:0000000078ED050B 5:000000008C532C95 6:000000008C8E46AA 7:0000000070763D9A 
; rax  0:00000000A67328FA 1:00000000A89E1B20 2:00000000A1422221 3:0000000095A3609A 4:000000009076D641 5:00000000A6727A55 6:00000000A6A716D6 7:000000008619DBB1 
; rax  0:00000000BF8C3503 1:00000000C1E67832 2:00000000BA60A926 3:00000000AC614076 4:00000000A79EC07E 5:00000000BFCA8372 6:00000000BFD16E36 7:000000009EA39816 
; rax  0:00000000D8D28878 1:00000000DB5A2D90 2:00000000D3C2EEC8 3:00000000C3B5358F 4:00000000BEF25248 5:00000000D94EC732 6:00000000D92E9A5C 7:00000000B76CBF5A 
; rax  0:00000000F364F717 1:00000000F61BED45 2:00000000EE4CD4F5 3:00000000DBF0DD03 4:00000000D6960B40 5:00000000F3F49120 6:00000000F3CCDC2B 7:00000000CD908BB1 
; rax  0:000000010CAF5C39 1:000000010F7F65AC 2:000000010794607E 3:00000000F3558826 4:00000000EDB41D87 5:000000010D6E104E 6:000000010D143A7B 7:00000000E6269D79 
; rax  0:00000001265E5397 1:000000012966189E 2:000000012142E370 3:000000010AF35A1D 4:00000001054A6680 5:00000001266FAE62 6:0000000126C3A07E 7:00000000FC5BB13C 
; rax  0:000000013F8D6B18 1:0000000142AECC90 2:000000013A8464F3 3:0000000121EAB481 4:000000011C65A6BB 5:000000013FD97F71 6:00000001400455C2 7:00000001150D1E17 
; rax  0:00000001587ED6B4 1:000000015BC93DB5 2:00000001537C27D0 3:0000000138FA8FA6 4:000000013383D9C5 5:0000000158FE4DDC 6:0000000158F8187E 7:000000012D7F707E 
; rax  0:00000001725F1223 1:0000000175D05B66 2:000000016D53C6C1 3:0000000150C15543 4:000000014B060BA8 5:000000017213E810 6:0000000172EA994B 7:0000000143CE5246 
; rax  0:000000018B4B48AC 1:000000018ECA6A73 2:00000001864B6D3E 3:0000000167C110DA 4:0000000162330882 5:000000018B43C83D 6:000000018BF533EE 7:000000015C0AE3DA 
; rax  0:00000001A51DF087 1:00000001A8D6B72B 2:00000001A02383D1 3:000000017F8F9869 4:0000000179B7869B 5:00000001A54EF53D 6:00000001A5F29236 7:00000001716AF95C 
; rax  0:00000001BE55C94F 1:00000001C230A9F1 2:00000001B95DB868 3:0000000196EBAAE6 4:0000000190E12D87 5:00000001BEAF683C 6:00000001BF41FCE0 7:000000018A19AEA3 
; rax  0:00000001D7A25E96 1:00000001DBBFC02D 2:00000001D278E372 3:00000001AE012FE7 4:00000001A84524DB 5:00000001D7815324 6:00000001D8B682C8 7:00000001A1E8963F 
; rax  0:00000001F11ECA3E 1:00000001F56FF361 2:00000001EBA3C5D9 3:00000001C542924A 4:00000001BF8E03B8 5:00000001F131994A 6:00000001F250B785 7:00000001B924C311 
; rax  0:000000020A0AE4F0 1:000000020E7A4EE6 2:00000002049B1E38 3:00000001DC4F5803 4:00000001D6A38BD9 5:000000020A5F8057 6:000000020B6075F1 7:00000001D18C0D93 
; rax  0:0000000223B5048E 1:00000002285ECDDD 2:000000021E140BEF 3:00000001F3DD3E6F 4:00000001EE3B62EB 5:0000000224411AA8 6:0000000225528BF9 7:00000001E7746AA6 
; rax  0:000000023CCADA4B 1:00000002418E6EC5 2:0000000237259084 3:000000020AEB425C 4:00000002054BD897 5:000000023D879934 6:000000023E81C66C 7:00000001FFF3EED5 
; rax  0:0000000256DE0C6F 1:000000025BD839B7 2:000000025140FD1E 3:0000000222F65F05 4:000000021CEFDAF6 5:00000002573192F6 6:0000000258B54D9D 7:0000000216C46E9E 
; rax  0:000000026FC96F8B 1:0000000274E8EB93 2:000000026A439F8A 3:0000000239FA7B33 4:00000002340B747C 5:000000027067035A 6:0000000271CF9009 7:000000022F3F15D2 
; rax  0:0000000288C87784 1:000000028E0E3183 2:000000028340C568 3:0000000251308605 4:000000024B2BEBED 5:0000000289975E4E 6:000000028AE1ABA8 7:0000000247C596AC 
; Gesamtergebnis der Zählung:87,387,760,281
FASM Programmer's Manual
Intel Introduction to x64 Assembly
Gruß
Antworten