Je débogue une application et j'ai besoin de voir la zone de mémoire pointée par une valeur stockée dans rcx
. Normalement, pour le code, cela serait fait en sélectionnant la variable (pointeur) et l'ajout d'une montre rapide ainsi que le nombre d'éléments à regarder à partir du pointeur:Pointeurs de déréférencement stockés dans des registres (visual studio)
Je veux obtenir le pointeur vers la chaîne déplacé dans rcx
dans le code ci-dessous:
#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
Comment puis-je obtenir la valeur pointée par rcx? Dans l'assemblage, la syntaxe serait:
[rcx+index]
mais comment puis-je regarder la valeur dans Visual Studio?
J'ai essayé d'ajouter:
[rcx]
[rcx],10
rcx,10
dans Espion, mais pour les deux premières entrées que je reçois:
nom du type n'est pas autorisé
et pour le dernier, je ne peux pas déréférencer rcx
, il est montré comme avant.
Edit:
Coulée la valeur dans le rcx
au type désiré, fonctionne. Dans le cas ci-dessus une montre rapide serait ajoutée sur (char*)rcx
montre la chaîne entière dans la fenêtre de débogage. Pour d'autres types (c'est-à-dire des entiers), il est également nécessaire que le nombre d'éléments soit également spécifié dans la montre, sinon seule la première valeur est affichée. Par exemple, (int*)rcx, 10
montre 10 entiers de quatre octets à partir de la valeur d'adresse stockée dans rcx
. Le type doit être ajusté pour chaque donnée stockée dans le registre.
Je n'ai pas fait cela avec des registres avant, mais simplement la coulée de la valeur du type que vous voulez inspecter comme devrait faire l'affaire - par exemple '(char *) rcx' – melak47
Cela a fonctionné, mais il doit être modifié chaque fois que le type de données déréférencées change. – Sebi