2012-04-15 14 views
7

を発見された私たちは、私たちが、私はそれがIDA似非者を経由してどのように動作するかを把握しようとしていますのソースを失ったDLLを持っています。しかし、私は次のエラーを取得するので、私はアクセスできない機能があるように思われる:IDA - 正のsp値は、エラー

それは言って、この持っているIDAのウェブサイト上で探し
Decompilation failure: 
46AFAF: positive sp value has been found 

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はこれをキャッチしていません。 溶液を所望の値に戻ってオフセットstackpointerを変更するために、ALT-Kを使用することです。

ARMコードで例:私はALT-k値を書き込んだコメントで

.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 

。 0x12A18でspオフセットが-0xd0に再調整されました

+0

ありがとうございました –

+12

ヒント:* Options *> * General *では、各命令の左側に* Display Stack pointer *オプションを有効にすることができますこれにより、特にグラフモードで、どこがどのように変化し、どのように見えるかがわかりやすくなります。 – DCoder