Como una asignación para una clase de seguridad, estoy tratando de usar __asm__("jmp 0xbffff994");
en mi código, pero cuando desensamblo cosas en gdb, la instrucción cambia a jmp 0xc8047e2a
. ¿Alguna idea de por qué y cómo puedo saltar a una dirección en particular?x86 saltar a una dirección
Respuesta
Probablemente porque es un salto a una dirección relativa, y el enlazador o cargador ha movido su código. Trate de poner la dirección en una variable, y luego hacer:
jmp dword [var]
o alternativamente:
push 0xbffff994
ret
* que * es la respuesta correcta, también tenga en cuenta que: "mov eax, 0x11223344; jmp eax"; también funcionará y es probablemente el más directo. –
muy cierto, pero podría estar utilizando la llamada rápida (no estoy seguro de la importancia de 0xbffff994). – Mark
¡La combinación PUSH RET funciona! ¡Gracias! – Martin
Daniel Explica por qué su salto no es el mismo que programó. Tiene que ver con archivos de objetos y enlaces.
si desea ir a una dirección en particular, es mejor parchar el salto con un depurador o desensamblador.
En mi sistema (versión de gcc 4.2.4, Ubuntu) esto se ve muy bien en la disassmbley (insight) :
int main() { asm("jmp 0xbffff994"); return 0; };
resultados de la disassmbley (Insight):
0x8048344 : lea 0x4(%esp),%ecx - 0x8048348 : and $0xfffffff0,%esp - 0x804834b : pushl -0x4(%ecx) - 0x804834e : push %ebp - 0x804834f : mov %esp,%ebp - 0x8048351 : push %ecx - 0x8048352 : jmp 0xbffff994 - 0x8048357 : mov $0x0,%eax - 0x804835c : pop %ecx - 0x804835d : pop %ebp - 0x804835e : lea -0x4(%ecx),%esp - 0x8048361 : ret
Supongo que ese desensamblador muestra el desplazamiento del jmp y no su objetivo real. (la instrucción jmp toma una compensación relativa a eip cuando le das un operando inmediato de 32 bits). –
¿Por qué lo adivinarías? ¿Hay alguna manera de probarlo? se ejecuta como una interfaz gráfica con GDB a continuación. –
O podría ser que no hay reubicación. Sin embargo, si vuelca los códigos de operación con el conjunto, podrá ver el desplazamiento. – Mark
Es difícil determinar la dirección exacta en el momento de la compilación, ¿ha intentado utilizar las etiquetas? Es mucho más común usarlos con jmp.
ejemplo:
start:
jmp exit
exit:
ret
yo recomendaría usar un editor hexadecimal y simplemente cambiando el valor si es sólo una cosa de tiempo.
- 1. Bandera de dirección en x86
- 2. ¿En qué dirección comienza a ejecutarse el x86?
- 3. ¿Qué significa valgrind con "saltar a una dirección no válida" aquí?
- 4. Posible captura de escritura en la dirección (x86 - linux)
- 5. ¿Es una mala idea saltar a LINQ to SQL ahora?
- 6. Obtener la dirección de la instrucción actual para x86
- 7. ¿Es posible almacenar la dirección de una etiqueta en una variable y usar goto para saltar a ella?
- 8. Dirección/Signo Extender bit en conjunto de instrucciones x86
- 9. ¿Qué significa un asterisco * antes de una dirección en el ensamblaje AT & T x86-64?
- 10. ¿Alguna consideración antes de saltar a SQLite?
- 11. Directamente Saltar a otra función de C++
- 12. phpeclipse: saltar a la definición de función?
- 13. saltar a la línea de archivo C#
- 14. Desreferenciar una etiqueta en ensamblador x86
- 15. Cómo saltar bytes en una corriente
- 16. Convirtiendo un int a una dirección IP
- 17. Enlazar IIS Express a una dirección IP
- 18. Vincular a una DLL de dirección grande
- 19. expressjs enlazar a una dirección IP específica
- 20. Puntero a una dirección fija específica
- 21. JavaScript - Saltar al ancla
- 22. Saltar iteración actual
- 23. Saltar Iteraciones en Python
- 24. dirección C de una dirección de una variable
- 25. correos electrónicos, una diferente 'responder a' una dirección distinta de la dirección del remitente
- 26. ¿Cómo traducir una dirección de memoria virtual a una dirección física?
- 27. ¿Qué es la "UE" en la arquitectura x86? (calcula la dirección efectiva?)
- 28. Geocodificar una dirección IP?
- 29. Prevenir Refrescar 'Saltar' con Javascript
- 30. Recompile un código x86 con LLVM a uno más rápido x86
¿Por qué diablos necesitas saltar a una dirección sin formato? Estoy teniendo dificultades para entender cualquier uso posible (no nefasto) para eso. – kquinn
¿Qué sistema usas? –
@kquinn independientemente, su pregunta ha sido hecha, intentemos responderla. – samoz