es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se incrementa el valor del contador de programa?

Tengo un bloque de instrucciones para el cual quería saber cómo funciona el registro de PC. Dice en Wikipedia que el registro de PC guarda el valor de la siguiente instrucción a ejecutar, sin embargo, al observar el gráfico de desensamblaje de Binary Ninja para el mismo bloque de instrucciones, parece que esto no es completamente cierto.

Aquí parte del gráfico de desensamblaje de Binary Ninja, donde delante de cada carga de memoria está escrito la dirección en memoria desde donde ocurre la carga.
https://i.stack.imgur.com/EzEw3.png

000080ec         ldr r3, [pc, #76] -> 0x813c = 0x80f0 + 0x4c -> pc = 80f0 ?? (¿no debería ser 80ee?).
000080ee         cmp r3, #0
000080f0         it eq
000080f2         ldreq r3, [pc, #68] -> 0x8138 = 0x80f4 + 0x44 -> pc = 80f4 (esto tiene sentido).
000080f4         mov sp, r3
000080f6         sub.w sl, r3, #65536 (editado)

Esto también ocurre en otras partes del código, no siempre el PC guarda la dirección de la siguiente instrucción a ejecutar… ¿hay algo en lo que deba tener en cuenta?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en ensamblador, ARM, ingeniería inversa y contador de programa, puedo explicar por qué el gráfico de desmontaje de Binary Ninja sugiere que el registro de PC (Program Counter) no siempre contiene la dirección exacta de la próxima instrucción a ejecutar. El registro de PC contiene la dirección de la instrucción que se ejecutará después de la instrucción actual. Sin embargo, en algunos casos, las instrucciones pueden modificar el valor del registro de PC de tal manera que la próxima instrucción a ejecutar no sea la que está almacenada en el registro de PC. Esto puede suceder, por ejemplo, cuando se utilizan instrucciones condicionales o cuando se utilizan instrucciones de salto para saltar a una instrucción diferente. En tales casos, el valor del registro de PC se modifica para apuntar a una instrucción diferente, que será la siguiente en ejecutarse. Por lo tanto, al analizar un bloque de instrucciones, es importante tener en cuenta cualquier instrucción que pueda modificar el valor del registro de PC y ajustar el análisis en consecuencia.

Comments are closed.