Advertisement
goroh_kun

kallsyms_loader.idc

Mar 19th, 2011
1,958
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. /* kallsyms loader */
  2. /* by goroh_kun    */
  3. /* modified from H2enum Version 1.09 */
  4.  
  5. #include <idc.idc>
  6.  
  7. // returns -1 if symbol is NOT 'space'
  8. static is_space(c)
  9. {
  10.     return strstr(" \t\r\n\b",c);
  11. }
  12.  
  13. // strip leading blank characters from string.
  14. static ltrim(str)
  15. {
  16.     auto pos,c,l;
  17.  
  18.     l = strlen(str);
  19.     pos = 0;
  20.     while (pos < l)
  21.     {
  22.         c = substr(str,pos,pos+1);
  23.         if (is_space(c) == -1) break;
  24.         pos++;
  25.     }
  26.     return substr(str,pos,-1);
  27. }
  28.  
  29. // strip trailing blank characters from string.
  30. static rtrim(str)
  31. {
  32.     auto pos,c;
  33.  
  34.     pos = strlen(str);
  35.     while (pos > 0)
  36.     {
  37.         c = substr(str,pos-1,pos);
  38.         if (is_space(c) == -1) break;
  39.         pos--;
  40.     }
  41.     return substr(str,0,pos);
  42. }
  43.  
  44. static trim(str)
  45. {
  46.     return rtrim( ltrim(str) );
  47. }
  48.  
  49. // Find first delimiter position in string (SPACE or TAB).
  50. static FindDelim(str)
  51. {
  52.     auto pos1,pos2;
  53.  
  54.     pos1 = strstr(str," ");
  55.     pos2 = strstr(str,"\t");
  56.     if (pos1 == -1)  return pos2;
  57.     if (pos2 == -1)  return pos1;
  58.     if (pos1 < pos2) return pos1;
  59.     else         return pos2;
  60. }
  61.  
  62. // Main conversion routine
  63. static load_kallsyms(fname)
  64. {
  65.         auto def_addr, def_name, def_type;
  66.     auto hFile,in_str,pos,str_no,c;
  67.  
  68.         if ((hFile=fopen(fname,"r")) == 0)
  69.     {
  70.         Warning("Couldn't open file '%s'!",fname);
  71.         return -1;
  72.     }
  73.  
  74.     Message("Conversion started...\n");
  75.  
  76.     str_no = 0;
  77.     while ((in_str=readstr(hFile)) != -1)
  78.     {
  79.         str_no++;
  80.         pos = FindDelim(in_str);
  81.         def_addr = xtol(substr(in_str, 0, pos));
  82.         in_str = substr(in_str, pos + 1, -1);
  83.         pos = FindDelim(in_str);
  84.         def_type = substr(in_str, 0, pos);
  85.         in_str = substr(in_str, pos + 1, -1);
  86.         def_name = trim(in_str);
  87.         MakeCode(def_addr);
  88.         if(0 == MakeNameEx(def_addr, def_name, SN_NOCHECK | SN_NOWARN | SN_AUTO)){
  89.             auto i;
  90.             for(i=1; i<100; i++){
  91.                 def_name = def_name + "_" + ltoa(i, 10);
  92.                 if(0 != MakeNameEx(def_addr, def_name, SN_NOCHECK | SN_NOWARN | SN_AUTO)){
  93.                     break;
  94.                 }
  95.             }
  96.         }
  97.         Message("name %s = '%08x'(%s)\n", def_name, def_addr, def_type);
  98.     }
  99.     fclose(hFile);
  100.  
  101.     Message("Successful %d elements imported.\n", str_no);
  102.     return 0;
  103. }
  104.  
  105. static main()
  106. {
  107.     auto fname;
  108.  
  109.     fname = AskFile(0,"*.txt","Choose a kallsyms file to parse:");
  110.     if (fname == "") return;
  111.     load_kallsyms(fname);
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement