我试图弄清楚是否有办法获取包含随机字符的函数名称的地址。例如函数名是“Player_GetStats_m29275”,这里的“m292755” 是随机字符。所以我只想通过“Player_GetStats”来搜索函数的名称,这样它就会给我函数的地址。
get_name_ea不适合这样做。我可以使用find_text搜索该函数,但它太慢了,即使我提到了该段也需要很多时间。
请帮忙,我将不胜感激。谢谢
我试图弄清楚是否有办法获取包含随机字符的函数名称的地址。例如函数名是“Player_GetStats_m29275”,这里的“m292755” 是随机字符。所以我只想通过“Player_GetStats”来搜索函数的名称,这样它就会给我函数的地址。
get_name_ea不适合这样做。我可以使用find_text搜索该函数,但它太慢了,即使我提到了该段也需要很多时间。
请帮忙,我将不胜感激。谢谢
据我所知,IDA 没有function_name_to_address()获取模式并返回地址的。您可以遍历所有函数并检查它们的名称是否与您想要的名称匹配。它不应该花太长时间。
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)
或者,您可以使用正则表达式来匹配您想要的名称:
import re
funcName = "Player_GetStats_m29275"
re.compile("^Player_GetStats_\w\d{5}$")
if pattern.match(funcName):
"%s match the pattern" % funcName
解释:
^ 是为“开头”\w 匹配一个单词字符(在本例中为“m”)\d 匹配一个数字{5}检查前一个表达式 ( \d) 是否重复了 5 次$ 用于“行尾”