1.當想使用F5時出現“please position the cursor within a function”,那么就創建函數,但是創建時出現“The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.”則需要對選定代碼創建函數。IDA默認到下一個函數開頭(或者固定函數結尾標志),所以難免會出現問題。
轉:https://bbs.pediy.com/thread-158896.htm
高手飄過~,本文章只想讓搜索引擎收錄,以便那些新手查找的。
如圖,
代碼是紅色的,就是說IDA沒有分析出來,為了方便分析,我們會用快捷鍵P(Create Function) 來創建函數.只是我們在函數頭部 按P的時候 總會提示
The function has undefined instruction/data at the specified address.
Your request has been put in the autoanalysis queue.
大家注意 retn 后面兩行多余的代碼,這是罪魁禍首.如果我們不能創建函數,就不能使用F5來分析代碼了,想讓這些代碼變綠色的方法(創建函數)很簡單.
用鼠標從函數頭部開始到 retn 結尾 拖一下,變成灰色.
然后用快捷鍵 P 或者右鍵菜單,CreateFunction 來創建函數就可以了。
用拖的方法,去創建一個函數的好處是,我們可以選擇任意的一部分IDA分析不出來的代碼(就是紅色代碼),成為一個綠色的代碼(IDA可識別的代碼).
當然了,到這里也不算完.下圖是代碼變綠色的,我用上面的方法創建函數了,可還是不能F5,
我們通過Stack Pointer 發現這個函數的堆棧是不平衡的.此時我們需要找接近retn 的 最后一個Call 然后去修正堆棧.
我們看到 retn 左邊綠色的數字是 28,我們通過ALT + k 修正堆棧,把 28 retn 改成 0 就可以了。
修正堆棧的時候一定要選擇 Call 然后修正堆棧,下圖是修正后的 代碼
很簡單的一個東西,篇幅有點大了,可能存在一些問題,不過我的目的是F5就可以了 嘿嘿.
----------------------