IDAスクリプト、関数名を取得する名前にランダムな文字が含まれている


4

ランダムな文字を含む関数名のアドレスを取得する方法があるかどうかを確認しようとしていました。 たとえば、関数名は"Player_GetStats_m29275"ここでは"m292755" はランダムな文字です。だから私はちょうど"Player_GetStats"によって関数の名前を検索したいので、それは私に関数のアドレスを与えます。

get_name_eaはこれには適していません。私はfind_textで関数を検索することができますが、その速度が遅すぎ、セグメントに言及しても時間がかかる。

助けてください、私は感謝します。ありがとう

2

私が知る限り、IDAにはパターンを取得してアドレスを返すfunction_name_to_address()がありません。すべての関数を繰り返し処理し、名前が目的のものと一致するかどうかを確認できます。それはあまりにも長くかかるべきではありません。説明

import re 

funcName = "Player_GetStats_m29275" 
re.compile("^Player_GetStats_\w\d{5} $") 
if pattern.match(funcName): 
  "%s match the pattern" % funcName 

  • ^
  • \wマッチ一言 "で始まり" です

    from idautils import * 
    from idaapi import * 
    from idc import * 
    
    ea = BeginEA() 
    for funcAddr in Functions(SegStart(ea), SegEnd(ea)): 
      funcName = GetFunctionName(funcAddr) 
      # Check if the function name starts with "Player_GetStats" 
      if funcName.startswith("Player_GetStats"): 
       print "Function %s is at 0x%x" % (funcName, funcAddr) 
    

    また、あなたが名前を一致させるためにregular expressionを使用することができます文字(この場合「m」)

  • \dは、前式(\d)は
  • $ "行の終わり" の
で5回繰り返していること
  • {5}チェックを数字と一致します