IDA 中只能匯出全部函式的匯編代碼,匯出速度很慢,匯出的asm檔案很大,不方便閱讀,
我們在逆向程序中,有時只需要匯出單個函式的代碼,方便分析,
我用IDC腳本來實作,代碼邏輯很簡單:
- 首先是把游標放在函式體中的任意位置
- 找到函式體開始以及結束的位置
- 匯入這個函式的代碼
1 #include <idc.idc> 2 3 static get_idb_dir() { 4 auto file_full_path = get_idb_path(); 5 auto idbdir = qdirname(file_full_path); 6 return idbdir; 7 } 8 9 static main() { 10 auto cea = ScreenEA(); 11 msg("ea = 0x08%x\n", cea); 12 13 auto addr_func_start = get_func_attr(cea, FUNCATTR_START); 14 auto addr_func_end = get_func_attr(cea, FUNCATTR_END); 15 if (addr_func_start != -1 && addr_func_end != -1) { 16 if (addr_func_start >= addr_func_end) { 17 msg("ERR: start addr <= end addr"); 18 return; 19 } 20 21 msg("func start: %08x\n", addr_func_start); 22 msg("func end : %08x\n", addr_func_end); 23 24 auto filepath = sprintf("%s\\func_%08x.asm", get_idb_dir(), addr_func_start); 25 msg("path: %s\n", filepath); 26 auto hf = fopen(filepath, "w"); 27 if (hf != 0) { 28 auto f = gen_file(OFILE_LST, hf, addr_func_start, addr_func_end, 0); 29 if (f != -1) { 30 msg("make asm file ok.\n"); 31 } else { 32 msg("ERR: gen_file error.\n"); 33 } 34 } else { 35 msg("ERR: fopen %s error.\n", filepath); 36 } 37 } else { 38 msg("ERR: find func error.\n"); 39 } 40 }
使用方法:
- 將上面的檔案保存為 func.idc
- 在IDA上面將游標放在要匯出的函式體內
- 按下快捷鍵 Alt+F7, 然后選擇上面的IDC檔案
- 匯出的檔案放在IDB檔案目錄下,func_XXXX.idc
上面的代碼,我在IDA Pro 7.3 上測驗通過,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/216183.html
標籤:其他
