首页
社区
课程
招聘
如何根据函数地址获取函数名?
发表于: 2009-12-25 12:08 8071

如何根据函数地址获取函数名?

2009-12-25 12:08
8071
在RING3里如何根据函数地址获取该函数的名称?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2009-12-25 12:30
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果知道该函数所在DLL的加载基地址。
那么可以看看以下一种通用但是未必高效的办法
那么汇编代码方式实现如下描述:

把该加载基地址看做PE文件的基地址,经过一系列PE文件结构指针的运算,找到输出表。
用该DLL所有函数名字的指针依次做参数,加上该DLL的加载基地址,通过调用GetProcAddress函数得到 所有函数依次的地址。
用这个地址与我们已知的那一个函数地址比较,相等的话,把参数二(这是个指针)取出。
通过指针可以找到该函数名字的字符串,就达到了目的。

楼主如果能比较熟练写出汇编代码并有一定的PE结构知识,那么可以自己写。如果感觉能力不足,可以搜索下相关代码,论坛里这样的汇编代码我记得是有几个的。

PS:楼上贴的很快啊。
2009-12-25 12:38
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
4
symgetsymfromaddr
2009-12-25 12:42
0
雪    币: 92
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
反编译后的程序,比如在IDA中,一般函数名称都用sub_004012A4之类的名称来表示,后面的004012A4就是函数在内存中的虚拟地址。
无法知道之前比如用C语言写的程序时的函数名称
函数名称只是提供一种地址映射机制,从而找到一段代码的地址来执行它,和具体起什么名字没有关系
当然也可以通过分析函数的作用,自己把sub_00401234换成有实际意义的名称,便于分析。
如果是系统ring0级的函数,相应的DLL动态链接库中有函数名称和地址的映射关系。
只是个人理解。
2009-12-25 12:47
0
游客
登录 | 注册 方可回帖
返回
//