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

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

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

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

比如 b   add

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

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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

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

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

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

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

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

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