2012-04-15 29 views
7

Chúng tôi có một DLL mà chúng tôi đã mất nguồn vì vậy tôi đang cố gắng tìm ra cách nó hoạt động thông qua IDA Dissembler. Tuy nhiên có vẻ là chức năng mà tôi không thể truy cập bởi vì tôi nhận được lỗi sau:IDA - giá trị sp dương đã được tìm thấy lỗi

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

Nhìn trên trang web IDA nó đã cho biết:

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

Kể từ Tôi mới vào toàn bộ cảnh tháo dỡ là bất cứ ai có thể cung cấp thêm thông tin về những gì gây ra con trỏ ngăn xếp để được cao hơn so với con trỏ ngăn xếp ban đầu và cho dù điều này là fixable. Cảm ơn bạn đã dành thời gian

Trả lời

15

Điều này thường xảy ra khi hàm có nhiều lần trả về và ida không bắt được. Giải pháp là sử dụng alt-k để thay đổi bù trừ stackpointer về giá trị mong muốn.

Một ví dụ với mã 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 

Trong những ý kiến ​​tôi đã viết các giá trị alt-k. Tại 0x12A18 chênh lệch sp được điều chỉnh lại thành -0xd0

+0

Cảm ơn rất hữu ích –

+12

Gợi ý: trong * Tùy chọn *> * Chung *, bạn có thể bật tùy chọn * Hiển thị con trỏ ngăn xếp * ở bên trái của mỗi lệnh , giúp dễ dàng thấy nơi nó thay đổi và cách thức, đặc biệt là ở chế độ biểu đồ. – DCoder

Các vấn đề liên quan