首页
社区
课程
招聘
[求助]请问各位大虾,如何获取其他进程的符号表
2008-8-14 22:23 5572

[求助]请问各位大虾,如何获取其他进程的符号表

2008-8-14 22:23
5572
想实现一个调试器

可以在命令行方式下调试别的进程

比如 b   add

但问题是,如何取到 其他进程的符号表,从而根据函数名查找到地址呢?

请各位大虾指教,如果有调试器的范例代码,更感谢!!!!!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (7)
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
mstwugui 6 2008-8-15 00:27
2
0
不是很理解楼主所说的符号表含义,没有引出表的可执行文件本身是不存在什么根据函数名查找地址的,因为程序原本也只是根据地址访问相应的函数并不会保存函数名

但如果是针对有引出表的可执行文件或是动态库而言,要根据函数名查找地址最简单的办法当然是GetProcAddress,如果出于某些原因不想用系统API那也可以查询目标文件的pe头然后遍历引出表
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dgougou 2008-8-15 08:41
3
0
微软有提供一个 DbgHelp 库可以用来查询Debug版本所生成的pdb文件,从而得到函数的地址

但是用DbgHelp好像只能查到当前进程的符号表,查询其他进程的符号表不成功

问下,GetProcAddress可以查询到.exe文件的函数地址吗?
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
mstwugui 6 2008-8-15 10:18
4
0
汗。。。debug版的自己都有source还用的着这么麻烦吗?别人发布的肯定都是release build哪来的符号表啊,最多也就是导出表里的函数,GetProcAddress能查询被加载到本进程内的模块所导出的函数地址,并不一定需要是dll,不过如果不打算load,就还是读取pe头然后遍历EAT吧
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dgougou 2008-8-17 10:27
5
0
我要做的就是开发一个脱离VC环境的Debug调试器。
EAT只有在DLL里面才有吧。EXE里面应该是没有的。
GetProcAddress应该也获取不到。
你好像还没有明白我想要做什么,晕。
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
mstwugui 6 2008-8-17 10:37
6
0
抱歉哈,确实不懂你的问题,如果是调试其他进程,你从哪找PDB?如果没有PDB只有一个独立的exe又谈什么符号表啊?也许你的问题改为“PDB文件的格式是怎样的”会更准确一些

另外EAT在DLL经常用到,但exe偶尔也会有用到的,只不过应该不是你关心的问题吧
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
mstwugui 6 2008-8-17 10:43
7
0
个人理解调试器重要的是功能,对于符号表这样的奢侈品或许很少能用得到(调试自己开发的程序应该很少会用到第三方调试工具,内核驱动程序除外),通常被调试的程序都不可能拿到PDB

即便是调试自己开发的程序并从PDB中读取了符号表最终也只是好看一点,看习惯汇编了未必速度会比多个PDB差多少
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
Aker 4 2008-8-17 11:04
8
0
也没有搞清楚楼主要做什么,做调试器的话,先把os提供的调试支持吃透吧
游客
登录 | 注册 方可回帖
返回