Quiero obtener el valor actual del registro EIP con lenguaje ensamblador. ¿Es eso posible?¿Cómo verificar el valor EIP con lenguaje ensamblador?
Respuesta
Suponiendo x86 de 32 bits, utilice la siguiente función:
get_eip: mov eax, [esp]
ret
Entonces, para obtener el valor de la EIP en EAX, simplemente:
call get_eip
call foo
foo:
pop eax ; address of foo
Este enfoque tiene un problema sutil. Los procesadores modernos intentan predecir direcciones de retorno: una llamada que no está emparejada con un retorno arruina la predicción. Ver http://blogs.msdn.com/b/oldnewthing/archive/2004/12/16/317157.aspx – user200783
@Paul Baker, por lo general, no es un problema crítico. Por ejemplo 'call @f/db '123', 0/@@:' es una práctica común – Abyx
call foo, pop eax, push eax, ret –
en x86-64 (a diferencia de 32 bit x86), hay RIP
-direccionamiento relativo (RIP
es el análogo de 64 bits de EIP
). Así, en código de 64 bits, sólo puede hacer
lea rax, [rip]
para mover el contenido actual de RIP
a RAX
(se puede utilizar lea
pero no mov
para esto).
Excelente comentario. Borré mi respuesta incorrecta Los comentarios no deben publicarse como respuestas. –
Hmmm, esto no funciona en un bloque VC++ 2015 '__asm {}'. :(Obtenga 'error C2415: error tipo de operando incorrecto'. – Adrian
- 1. Cómo verificar una "longitud de matriz" en lenguaje ensamblador (ASM),
- 2. Lenguaje ensamblador - ¿Cómo hacer Modulo?
- 3. lenguaje ensamblador y optimización
- 4. ¿Qué lenguaje ensamblador aprender?
- 5. Lenguaje ensamblador a C
- 6. ¿Cómo cambiar el valor de EIP en ollydbg?
- 7. ¿Vale la pena aprender el lenguaje ensamblador?
- 8. cómo se implementó lisp en lenguaje ensamblador?
- 9. ¿Cómo funciona `Skipcond` en el lenguaje ensamblador MARIE?
- 10. ¿Cómo hacer un ciclo en el lenguaje ensamblador x86?
- 11. Desarrollo de aplicaciones de Android con lenguaje ensamblador
- 12. Símbolos reubicables en formato ELF (lenguaje ensamblador)
- 13. Linux de 64 bits, Lenguaje ensamblador, ¿Problemas?
- 14. ¿Hay un lenguaje ensamblador para CUDA?
- 15. Lenguaje ensamblador: intente comprender una función pequeña
- 16. Terminología: "registros" en programación en lenguaje ensamblador
- 17. ¿Cambios de 128 bits utilizando el lenguaje ensamblador?
- 18. Resultado devuelto a eax (lenguaje ensamblador IA-32)
- 19. Linux system call table o cheetsheet en lenguaje ensamblador
- 20. Cómo verificar el valor nulo en NSNumber
- 21. ¿Cómo verificar el valor vacío en Javascript?
- 22. Incremento de 0 a 100 en lenguaje ensamblador
- 23. Acaba de aprender el lenguaje ensamblador x86. ¿Qué puedo hacer con eso?
- 24. ¿Cómo vincular un archivo de objeto C con un archivo de objeto de lenguaje ensamblador?
- 25. ¿Alguna vez necesita escribir código real en lenguaje ensamblador?
- 26. ¿Cómo se implementa la sincronización de subprocesos en el nivel de lenguaje ensamblador?
- 27. Cómo escribir el lenguaje ensamblador hello world program para 64 bit Mac OS X usando printf?
- 28. Cuál es el mejor recurso para aprender Lenguaje ensamblador para el microcontrolador PIC
- 29. Ejecutando código ensamblador con python
- 30. ¿Cómo verificar el valor vacío en el archivo cmd?
Esto es increíble: D – Mehrdad
Ojalá hubiera una manera de hacer esto sin etiquetas o byte contando – Dmitry