Ich debugge eine App und muss die Speicherregion sehen, auf die durch einen in rcx
gespeicherten Wert verwiesen wird.Dereferenzierung von Zeigern in Registern gespeichert (Visual Studio)
Ich mag den Zeiger bekommen: Normalerweise für Code, würde dies durch die Auswahl der Variable (Zeiger) und das Hinzufügen einer schnelle Uhr zusammen mit der Anzahl von Elementen aus dem Zeiger beginnen zu sehen getan werden die Zeichenfolge in rcx
im Code unten bewegt:
#include <stdio.h>
int main() {
000000013F1217C0 push rbp
000000013F1217C2 push rdi
000000013F1217C3 sub rsp,0E8h
000000013F1217CA lea rbp,[rsp+20h]
000000013F1217CF mov rdi,rsp
000000013F1217D2 mov ecx,3Ah
000000013F1217D7 mov eax,0CCCCCCCCh
000000013F1217DC rep stos dword ptr [rdi]
goto mylabel;
000000013F1217DE jmp $mylabel (013F1217EEh)
000000013F1217E0 jmp $mylabel (013F1217EEh)
printf("Skipped\n");
000000013F1217E2 lea rcx,[string "Skipped\n" (013F129C28h)]
000000013F1217E9 call printf (013F1211CCh)
mylabel:
printf("goto ftw!\n");
000000013F1217EE lea rcx,[string "goto ftw!\n" (013F129C38h)]
000000013F1217F5 call printf (013F1211CCh)
return 0xf00d;
000000013F1217FA mov eax,0F00Dh
}
000000013F1217FF lea rsp,[rbp+0C8h]
000000013F121806 pop rdi
000000013F121807 pop rbp
000000013F121808 ret
Wie kann ich den Wert, auf den RCX bekommen? In Assembly wäre die Syntax:
[rcx+index]
aber wie kann ich den Wert im Visual Studio beobachten?
Ich habe das Hinzufügen versucht:
[rcx]
[rcx],10
rcx,10
in Schnellüberwachung, aber für die ersten beiden Einträge erhalte ich:
Typname ist nicht
und für die letzte erlaubte ich kann nicht dereferenzieren rcx
Es ist wie zuvor gezeigt.
Edit:
den Wert in der rcx
auf die gewünschte Art Casting arbeitet. In dem obigen Fall würde eine schnelle Uhr hinzugefügt werden (char*)rcx
zeigt die gesamte Zeichenfolge im Debugging-Fenster. Für andere Typen (d. H. Ganzzahlen) ist es ebenfalls erforderlich, dass die Anzahl von Elementen auch in der Uhr angegeben wird, andernfalls wird nur der erste Wert gezeigt. Zum Beispiel zeigt (int*)rcx, 10
10 Vier-Byte-Ganzzahlen, beginnend mit dem in rcx
gespeicherten Adressenwert. Der Typ muss für jeden im Register gespeicherten Daten angepasst werden.
Ich habe dies nicht zuvor mit Registern getan, aber einfach den Wert auf den Typ, den Sie es überprüfen möchten, wie der Trick - z. '(char *) rcx' – melak47
Das hat funktioniert, aber es muss jedes Mal geändert werden, wenn sich der Typ der dereferenzierten Daten ändert. – Sebi