CPU Register auslesen und anzeigen
CPU Register auslesen und anzeigen
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.
Setzen mit MOV kann man ja wie ich gesehen habe aber kann man alle CPU Register auslesen und den Wert im PB Fenster anzeigen?
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.
Setzen mit MOV kann man ja wie ich gesehen habe aber kann man alle CPU Register auslesen und den Wert im PB Fenster anzeigen?
Re: CPU Register auslesen und anzeigen
Ist im PB Debugger integriert:
The Assembly Debugger
PS: AX, EAX, RAX sind alle die selben Register nur halt 16bit, 32bit, 64bit
The Assembly Debugger
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: CPU Register auslesen und anzeigen
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.
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.
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: CPU Register auslesen und anzeigen
Hallo ¯\_(ツ)_/¯ ,
hier ist eine Übersicht über die x64-Register: Intel x86-64 Architecture
und ein kleines Beispiel:
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 |
Re: CPU Register auslesen und anzeigen
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?
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?
Re: CPU Register auslesen und anzeigen
Ist je Prozess verschieden.¯\_(ツ)_/¯ 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?
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.
Re: CPU Register auslesen und anzeigen
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...
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
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- juergenkulow
- Beiträge: 188
- Registriert: 22.12.2016 12:49
- Wohnort: :D_üsseldorf-Wersten
Re: CPU Register auslesen und anzeigen
Hallo,
FASM Programmer's Manual
Intel Introduction to x64 Assembly
Gruß
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
Intel Introduction to x64 Assembly
Gruß