2011-08-25 13 views
8

Estoy tratando de desmontar un objeto creado para ARM con gcc. Desafortunadamente, objdump está tratando de adivinar si el código es ARM y Thumb, y se está equivocando: cree que mi código es Thumb cuando en realidad es ARM.objdump y ARM vs Thumb

Veo que objdump tiene una opción para forzarlo a interpretar todas las instrucciones como Thumb (-Mforce-thumb), ¡pero no tiene uno para forzar el modo ARM!

Esto parece una omisión realmente extraña para mí, y está obstaculizando seriamente mi capacidad para realizar el trabajo (estoy en un dispositivo integrado y mi único método de depuración es mirar el desmontaje). He intentado varios enfoques, incluido tratar de decirle a objdump que use una arquitectura ARM que no admita Thumb, pero nada parece funcionar. ¿Algunas ideas?

(Y sí, sé que las instrucciones son muy ... ARM)

+0

está pelando los archivos binarios (elf), tal vez la información estaba allí y luego se eliminó. O tal vez tenga que agregar un interruptor para incluir la información de depuración en el binario. –

+0

Es 'objdump ... -Mno-force-thumb' hoy. No puedo decir si esto estuvo presente en 2011. Básicamente es ARM o Thumb, por lo que cuando dices 'no-force-thumb' el conjunto de instrucciones es ARM. – JSmyth

Respuesta

0

Esto suena como un error en cualquiera de compilador/enlazador o objdump. Normalmente, los símbolos se deben marcar correctamente si son Pulgar o BRAZO y se desmontan en consecuencia.

Dicho esto, hay algunas cosas que usted puede intentar:

  1. archivo como binario simple (D binaria -b) interpretan - esto deshabilitará símbolo de cheques y se desmonte todo el archivo como ARM. Desventaja: mucha basura en la salida, no hay buenas direcciones.
  2. use IDA Pro. Incluso si adivina incorrectamente, siempre puede anular su decisión. Además, es un entorno de desensamblaje mucho más agradable :)
+0

Necesito la información del símbolo, así que sé lo que estoy mirando, por lo que usar binarios en bruto no es suficiente, me temo. El archivo en cuestión tiene información de depuración para que la información de marcado esté allí. Mi proceso de compilación es intrincado pero involucra a gcc en todas partes; ¿Alguna idea de lo que podría estar eliminando el símbolo de marca? –

+0

Es difícil decir cuál es exactamente el problema. Imprima el contenido de la tabla de símbolos y eche un vistazo a print_insn (_arm) en arm-dis.c. Tal vez eso te dará algunas ideas. –

3

arm-linux-gnueabi-objdump -marm -b binary -D hace el truco para mí. Sin embargo, no conserva la información del símbolo, por lo que no es exactamente lo que está buscando, pero le da el desmontaje, que es un comienzo.