給 IDA 增長導出單個彙編函數的功能

IDA 中只能導出所有函數的彙編代碼,導出速度很慢,導出的asm文件很大,不方便閱讀。
咱們在逆向過程當中,有時只須要導出單個函數的代碼,方便分析。函數

我用IDC腳原本實現,代碼邏輯很簡單:測試

  1. 首先是把光標放在函數體中的任意位置
  2. 找到函數體開始以及結束的位置
  3. 導入這個函數的代碼


 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

  1. 將上面的文件保存爲 func.idc
  2. 在IDA上面將光標放在要導出的函數體內
  3. 按下快捷鍵 Alt+F7, 而後選擇上面的IDC文件
  4. 導出的文件放在IDB文件目錄下,func_XXXX.idc


上面的代碼,我在IDA Pro 7.3 上測試經過。code

image

相關文章
相關標籤/搜索