Hardware- und Elektronikbasteleien, Ansteuerung von Schnittstellen und Peripherie.
Fragen zu "Consumer"-Problemen kommen in Offtopic.
¯\_(ツ)_/¯
Beiträge: 141 Registriert: 18.08.2017 09:35
Beitrag
von ¯\_(ツ)_/¯ » 06.10.2018 10:47
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?
STARGÅTE
Kommando SG1
Beiträge: 7031 Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:
Beitrag
von STARGÅTE » 06.10.2018 10:58
Ist im PB Debugger integriert:
The Assembly Debugger
PS: AX, EAX, RAX sind alle die selben Register nur halt 16bit, 32bit, 64bit
Josh
Beiträge: 1028 Registriert: 04.08.2009 17:24
Beitrag
von Josh » 06.10.2018 11:02
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.
juergenkulow
Beiträge: 188 Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Beitrag
von juergenkulow » 06.10.2018 15:30
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
Beitrag
von ¯\_(ツ)_/¯ » 06.10.2018 15:43
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?
Mijikai
Beiträge: 754 Registriert: 25.09.2016 01:42
Beitrag
von Mijikai » 06.10.2018 15:54
¯\_(ツ)_/¯ 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.
mk-soft
Beiträge: 3855 Registriert: 24.11.2004 13:12
Wohnort: Germany
Beitrag
von mk-soft » 06.10.2018 16:03
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...
juergenkulow
Beiträge: 188 Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Beitrag
von juergenkulow » 18.10.2018 10:52
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ß