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 }
使用方法:spa
上面的代碼,我在IDA Pro 7.3 上測試經過。code