Supponendo che si esegue il debug di un processo non gestito ...
Quando si "Debug/pausa per l'All", attenersi alla seguente procedura:
Scegliere "Debug/Windows/Moduli" per ottenere un elenco di tutti caricato moduli. Sotto la colonna "Indirizzo" nella finestra Moduli è l'intervallo di memoria per quel modulo. Nella casella "Indirizzo:" nella finestra di disassemblaggio, digita l'indirizzo iniziale per il modulo (assicurati di aggiungere 0x prima del numero)
Ora dovresti essere all'inizio del modulo con cui vuoi giocare . Se conosci l'indirizzo di una funzione, puoi semplicemente passare a quell'indirizzo.
Ecco un esempio:
Run sol.exe connettersi al processo, e rompere tutti. Guardate i moduli e trovate "cards.dll", lo vedrete caricato a 6fc10000 (sulla mia macchina, comunque).
Immettere l'indirizzo (0x6fc10000) nella finestra di disassemblaggio e vi porterà all'inizio del modulo.
Ora dire che voglio effettivamente passare a una funzione. Aprire la DLL in Dependency Walker (depends.exe) per ottenere gli offset delle funzioni. Nel mio esempio, voglio impostare un punto di interruzione sulla funzione "cdInit". In Dependecny Walker, mostra che l'offset della funzione esportata cdInit è 0x000013e6. Quindi, per ottenere quella funzione, aggiungerei l'indirizzo iniziale del modulo (0x6fc10000) all'offset (0x000013e6) per ottenere 0x6fc113e6.
Digitando questo indirizzo nella casella di disassemblaggio, in effetti, salta direttamente all'inizio di tale funzione.
Ritiene che il lavoro con le DLL di codice nativo? –
Sfortunatamente no, Reflector funziona solo con codice gestito (.Net). Non è più gratuito :) –