lo smontaggio assomiglia:Perché non posso entrare in un'istruzione di chiamata durante Debug/Disassembly?
methShort(ref x, ref y);
000007FF00163F67 lea r8,[rsp+34h]
000007FF00163F6C lea rdx,[rsp+30h]
000007FF00163F71 mov rcx,qword ptr [rsp+20h]
000007FF00163F76 mov rcx,qword ptr [rcx+8]
000007FF00163F7A mov rax,qword ptr [rsp+20h]
000007FF00163F7F call qword ptr [rax+18h]
Il metodo "methShort" viene creato dinamicamente in .NET utilizzando Reflection.Emit. Prende due parametri Int32 come valori "byRef". Questo è in fase di debug come build in "modalità di rilascio".
Posso passare attraverso il montaggio fino all'istruzione "call". Il contenuto della memoria puntata da R8 e RDX (i parametri) sembra buono. Non so che tipo di magia abbia permesso al JIT di usare i registri per la chiamata invece che per la pila, ma questo non è il punto.
Quando si tenta di "Passare a" l'istruzione di chiamata, il debugger "lo supera" invece. La routine viene effettivamente chiamata- il metodo ha eseguito correttamente la sua funzione. Ma non riesco a smontare né ad entrare nel metodo.
Nel punto immediatamente precedente alla chiamata, RAX contiene il valore 00000000025C67A8h. Quando viene aggiunto 18 ore, l'indirizzo per l'indiretto diventa 00000000025C67C0h. QWORD a questo indirizzo è 000000001b64dc48h.
Se provo a smontare questo indirizzo (000000001b64dc48h), il debugger ritorna con "L'indirizzo specificato non può essere visualizzato. Non c'è codice nel percorso fornito".
Come tentativo di Ave Maria, ho provato a smontare il codice in RAX senza l'indirezione, ma come mi aspettavo anche questo è fallito.
Qualcuno può dirmi come arrivare a qualunque codice sia all'indirizzo o se qualcosa di simile a LEA deve essere eseguito sull'indirizzo (RAX + 18h) prima di smontare il codice lì?
https://msdn.microsoft.com/en-us/library/ms235286.aspx su x64 i primi due parametri di una chiamata di metodo sono in RCX e RDX. – xanatos
VS rifiuta di mostrare alcune parti del runtime. Questa deve essere una chiamata helper di runtime. Non ho mai capito perché hanno fatto assolutamente che il debugger non riesca nemmeno a smontare il runtime. – usr