Seite 1 von 1
CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 10:47
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.
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
Verfasst: 06.10.2018 10:58
von STARGÅTE
Ist im PB Debugger integriert:
The Assembly Debugger
PS: AX, EAX, RAX sind alle die selben Register nur halt 16bit, 32bit, 64bit
Re: CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 11:02
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.
Re: CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 15:30
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 |
Re: CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 15:43
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?
Re: CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 15:54
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.
Re: CPU Register auslesen und anzeigen
Verfasst: 06.10.2018 16:03
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...
Re: CPU Register auslesen und anzeigen
Verfasst: 18.10.2018 10:52
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ß