2012-04-15 1 views
7

У нас есть DLL, которые мы потеряли для источника, поэтому я пытаюсь выяснить, как это работает через IDA Dissembler. Однако, как представляется, функция, что я не могу получить доступ, потому что я получаю следующее сообщение об ошибке:IDA - положительное значение sp найдено ошибка

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

Глядя на веб-сайте IDA он это сказать:

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

С Я новичок во всей демонстрационной сцене, кто-нибудь может предоставить дополнительную информацию о том, что приводит к тому, что указатель стека будет выше, чем указатель начального стека, и является ли это исправление. Спасибо за ваше время

ответ

15

Это обычно происходит, когда функция имеет несколько возвратов, а ida этого не понимает. Решение заключается в использовании alt-k, чтобы изменить смещение стоп-инструмента обратно на нужное значение.

Пример с 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 

В комментариях я писал значения альт-K. В 0x12A18 смещение sp было скорректировано обратно на -0xd0

+0

Спасибо, что было очень полезно –

+12

Подсказка: в * Опции *> * Общие *, вы можете включить опцию * Показать указатель стека * в левой части каждой инструкции , что упрощает просмотр, где оно изменяется и как, особенно в режиме графика. – DCoder

 Смежные вопросы

  • Нет связанных вопросов^_^