Questão:
Como determino a duração de uma rotina no ARMv7?
chuacw
2013-09-23 08:14:55 UTC
view on stackexchange narkive permalink

Estou desmontando e fazendo engenharia reversa da lógica de uma rotina de montagem escrita em ARMv7 (espero estar usando a terminologia certa, já que sou um novato neste processador em particular).

Ao fazer isso , Me deparei com este site: Introdução ao ARM. Para determinar a quantidade de código que preciso desmontar, primeiro preciso determinar o comprimento do código. É meu entendimento que só preciso procurar [Bxx] [2] (branch) instruções e instruções que alteram o PC (contador de programa), por exemplo,

  • MOV PC, r14
  • POP {r4, r5, pc}

Alguém pode aconselhar se perdi alguma instrução que preciso observar? Obrigado.

Dois respostas:
Igor Skochinsky
2013-09-23 15:57:58 UTC
view on stackexchange narkive permalink

Aqui está o que IDA considera um retorno no ARM:

  • RET (= MOV PC, LR )
  • POP {reglist} se reglist incluir LR ou PC
  • LDMFD SP, {reglist} , LDMED SP, {reglist} ou LDMDB R11, {reglist} se reglist incluir LR ou PC
  • LDR PC, [SP], # 4
  • BX LR
  • BX reg se precedido por POP {reglist} e reglist inclui reg .
18446744073709551615
2014-05-22 12:44:43 UTC
view on stackexchange narkive permalink

Na verdade, pode haver algo como:

  .text: 00192CB6 POP {R4} .text: 00192CB8 B.W sub_268508.text: 00192CB8; Fim da função XXX :: YYY :: zZz (void)  

IIRC Eu também vi ramificações condicionais que conduzem para fora do que eu esperaria ser os limites da função, mas não consigo encontrar nenhum exemplo agora .



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 3.0 sob a qual é distribuído.
Loading...