私はアプリをデバッグしていて、rcx
に格納されている値で指し示されているメモリ領域を確認する必要があります。通常、コードのために、これは変数(ポインタ)を選択し、ポインタから始まる観戦する要素の数とともに、迅速な時計を追加することによって行われます:ポインタをレジスタに格納する(Visual Studio)
私はへのポインタを取得したいです
#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
がどのように値がRCXで指されることがあります。文字列は、以下のコードでrcx
に移動しますか?アセンブリでは、構文は次のようになります。
[rcx+index]
Visual Studioではどのように値を見ることができますか?
私が追加しようとしました:[クイックウォッチで
[rcx]
[rcx],10
rcx,10
を、私は得る最初の2つのエントリのために:
タイプ名
を許可し、私は間接参照することはできません最後のためにされていませんrcx
以前と同じように表示されます。
編集:所望のタイプにrcx
の値を鋳造
、働きます。上の例では、(char*)rcx
にクイックウォッチが追加され、デバッグウィンドウに文字列全体が表示されます。他のタイプ(すなわち整数)については、要素の数も時計に指定されていなければならず、それ以外の場合は最初の値のみが表示されます。たとえば、(int*)rcx, 10
は、rcx
に格納されたアドレス値から始まる10個の4バイト整数を示します。タイプは、レジスタに格納された各データに対して調整する必要があります。
私は前のレジスタでこれを行っていませんでした、しかし、単にあなたがトリックを行う必要があるとして、それを検査するタイプに値をキャストする - 例えば'(char *)rcx' – melak47
これはうまくいきましたが、逆参照されるデータのタイプが変わるたびに変更する必要があります。 – Sebi