2012-04-15 13 views
7

हमारे पास एक डीएलएल है जिसे हमने स्रोत खो दिया है, इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि यह आईडीए डिस्सेबलर के माध्यम से कैसे काम करता है। यह यह कहना हैआईडीए - सकारात्मक स्पा मान त्रुटि मिली है

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 इसे पकड़ नहीं लेता है। समाधान स्टैकपोइंटर ऑफ़सेट को वांछित मान में बदलने के लिए 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 पर एसपी ऑफसेट को वापस -0xd0

+0

धन्यवाद बहुत उपयोगी था –

+12

संकेत: * विकल्प *> * सामान्य * में, आप प्रत्येक निर्देश के बाईं ओर * प्रदर्शन स्टैक सूचक * के लिए एक विकल्प सक्षम कर सकते हैं , जो यह देखना आसान बनाता है कि यह कहां बदलता है और कैसे, खासकर ग्राफ मोड में। – DCoder

संबंधित मुद्दे