10

ソースを失った DLL があるため、IDA Dissembler を介してどのように機能するかを理解しようとしています。ただし、次のエラーが発生するため、アクセスできない機能があるようです。

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

IDA の Web サイトを見ると、次のように書かれています。

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

私は Dissembling シーン全体に慣れていないので、スタック ポインターが初期スタック ポインターよりも高くなる原因と、これが修正可能かどうかについて、詳しい情報を提供できる人は誰でもいます。御時間ありがとうございます

4

1 に答える 1

20

これは通常、関数に複数の戻り値があり、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

コメントで、alt-k 値を書きました。0x12A18 で、sp オフセットが -0xd0 に再調整されました

于 2012-04-16T14:01:20.420 に答える