2012-04-15 12 views
7

Abbiamo una DLL che abbiamo perso la fonte per cui sto cercando di capire come funziona tramite IDA Dissembler. Tuttavia sembra che ci sia la funzione che non posso accedere perché ricevo il seguente errore:IDA: è stato rilevato un valore sp positivo

Decompilation failure: 
46AFAF: positive sp value has been found 

Guardando sul sito web IDA ha questo da dire:

The stack pointer at the specified address is higher than the initial stack pointer. 
Functions behaving so strangely can not be decompiled. If you see that the stack 
pointer values are incorrect, modify them with the Alt-K (Edit, Functions, Change 
stack pointer) command in IDA. 

http://www.hex-rays.com/products/decompiler/manual/failures.shtml#04

Dal Sono nuovo per l'intera scena di Dissembling: chiunque è in grado di fornire maggiori informazioni su ciò che fa sì che il puntatore dello stack sia più alto del puntatore dello stack iniziale e se sia riparabile. Grazie per il tuo tempo

risposta

15

Questo di solito accade quando una funzione ha più ritorni, e ida non ha capito. La soluzione è usare alt-k per riportare l'offset dello stackpointer al valore desiderato.

Un esempio con il codice di ARM:

.text:00012A10     MOV  R0, #1   ; -0xd0 + 0 
.text:00012A14     ADD  SP, SP, #0xC8 ; -0xd0 + 0xc8 
.text:00012A18     LDMFD SP!, {R4,PC} ; -0x08 - 0xc8 <<< modified 
.text:00012A1C ; --------------------------------------------------------------------------- 
.text:00012A1C 
.text:00012A1C loc_12A1C        ; CODE XREF: sub_129E4+20j 
.text:00012A1C     MOV  R3, #0   ; -0xd0 + 0 

Nei commenti che ho scritto i valori alt-k. Al 0x12A18 l'offset sp è stata rimaneggiata torna a -0xd0

+0

Grazie che era molto utile –

+12

Suggerimento: in Opzioni * *> * * Generale, è possibile attivare l'opzione di visualizzazione * puntatore Stack * sul lato sinistro di ciascuna istruzione , che rende più facile vedere dove cambia e come, soprattutto in modalità grafico. – DCoder

Problemi correlati