Voglio ottenere il valore corrente del registro EIP con linguaggio assembly. È possibile?Come verificare il valore EIP con linguaggio assembly?
risposta
Supponendo x86 a 32 bit, utilizzare la seguente funzione:
get_eip: mov eax, [esp]
ret
Quindi, per ottenere il valore di PEI in EAX, semplicemente:
call get_eip
call foo
foo:
pop eax ; address of foo
Questo approccio ha un problema sottile. I processori moderni cercano di prevedere gli indirizzi di ritorno: una chiamata che non è associata a un ritorno incasina la previsione. Vedi http://blogs.msdn.com/b/oldnewthing/archive/2004/12/16/317157.aspx – user200783
@Paul Baker di solito non è un problema critico. Per esempio 'call @f/db '123', 0/@@:' è una pratica comune – Abyx
call foo, pop eax, push eax, ret –
On x86-64 (a differenza di 32 bit x86), c'è l'indirizzamento relativo RIP
(RIP
è l'analogo a 64 bit di EIP
). Quindi, in codice a 64 bit, si può solo fare
lea rax, [rip]
per spostare il contenuto corrente della RIP
-RAX
(è possibile utilizzare lea
ma non mov
per questo).
Commento eccellente. Ho cancellato la mia risposta errata. I commenti non devono essere pubblicati come risposte. –
Hmmm, questo non funziona in un blocco __asm {} 'di VC++ 2015. :(Ottieni l'errore "Errore C2415: tipo operando improprio". – Adrian
- 1. linguaggio assembly funzionale
- 2. Comprensione linguaggio assembly
- 3. Vale la pena imparare il linguaggio assembly?
- 4. Quanto è spiacevole il linguaggio assembly,/veramente /?
- 5. Cygwin: sviluppo del linguaggio assembly?
- 6. Programmazione linguaggio assembly di Windows
- 7. Stampa di un numero in linguaggio assembly?
- 8. Registro non valido eip?
- 9. Che cos'è _start globale nel linguaggio assembly?
- 10. Esiste un linguaggio assembly per CUDA?
- 11. Sviluppo di app Android utilizzando il linguaggio assembly
- 12. Chiamare funzioni C da linguaggio assembly x86
- 13. analisi del codice statico per linguaggio assembly
- 14. Spostamenti a 128 bit utilizzando il linguaggio assembly?
- 15. In che modo il linguaggio assembly interagisce con qualcosa come Internet?
- 16. Come verificare il valore nullo in NSNumber
- 17. Come verificare il valore DateTime predefinito?
- 18. Come verificare il valore null in java
- 19. problema nel capire mul & istruzioni IMUL del linguaggio Assembly
- 20. Come posso verificare la compatibilità all'indietro dell'API tra .net assembly
- 21. Cosa succede nel linguaggio assembly quando chiamate un metodo/funzione?
- 22. Verificare se il valore esiste nel dataTable?
- 23. differenza linguaggio assembly (MIPS) tra addi e add
- 24. Verificare il valore di attributo dell'oggetto con mockito
- 25. Verificare se la variabile ha il valore ''
- 26. Verificare il valore se presente nella colonna
- 27. Verificare se il valore intero è aumentato?
- 28. Rendi il mio assembly assembly COM asincrono
- 29. Come verificare se il valore è nan in unittest?
- 30. Come verificare se il valore esiste in questo array JavaScript?
Questo è fantastico: D – Mehrdad
vorrei che ci fosse un modo per farlo senza etichette o conteggio dei byte – Dmitry