Aktuelle Zeit: 11.12.2018 02:32

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 10:47 
Offline

Registriert: 18.08.2017 09:35
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 10:58 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Ist im PB Debugger integriert:


The Assembly Debugger
Bild

PS: AX, EAX, RAX sind alle die selben Register nur halt 16bit, 32bit, 64bit

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 11:02 
Offline
Benutzeravatar

Registriert: 04.08.2009 17:24
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 15:30 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo ¯\_(ツ)_/¯ ,

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

und ein kleines Beispiel:
Code:
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        |


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 15:43 
Offline

Registriert: 18.08.2017 09:35
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 15:54 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
¯\_(ツ)_/¯ 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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 06.10.2018 16:03 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
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 EventDesigner v1.x / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: CPU Register auslesen und anzeigen
BeitragVerfasst: 18.10.2018 10:52 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo,

Code:
; 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ß


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye