首页
社区
课程
招聘
[旧帖] 《已解决》《求助》windbg 用户态双机调试问题 0.00雪花
发表于: 2008-5-6 18:50 7221

[旧帖] 《已解决》《求助》windbg 用户态双机调试问题 0.00雪花

2008-5-6 18:50
7221
看了很多文档,还是不能建立起windbg双机调试通讯。
大部分介绍的太详细了,例如windbg帮助文档。细致到根本让你抓不到重点。
那是参考手册,不是入门文章。
附上一个最简单的"hello world" messagebox 程序。
哪位大侠能够用最简单的语言,能够描述清如下问题:
1. 如何建立起用户模式双机通讯  (内核模式较高级,以后再说吧)
2. 如何开始远程调试这个hello world 程序。能够让我们用F10单步走就可以啦。
3. hello world 程序退出时,要调用ExitProcess函数,我们怎样在这个函数:
   下断点,断下程序。
   
回答了这三个问题,我们就算入门了,就可以摸索着往前走了。
最好不要长篇大论,像微软一样,当我们想了解一个人的时候,他却在给你介绍这
个是手指头,那个是脚指甲尖...

我等是未入门的菜鸟,只等大侠门指点,我们照猫画虎的敲一敲,搞定上面三个
问题就好了,至于理解吗,只要搞定了,以后慢慢就会理解了。
还是ollydbg 用的爽,拿过来就能用,可惜不支持双机调试。

在此,我代表菜鸟们先谢过了。

附上调试用附件,是最简单的"hello world" message 程序,就不劳大侠动手了。
好像我没有提交附件的权利,不知上传到临时服务器是否管用。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
本帖并没有解决windbg 双机调试问题,但解决了VS2005双机调试问题。
我一定要搞定双机调试问题,还好,首先搞定了VC6 Visual Studio 双机调试。颇有一番曲折,可惜只能调试有代码的程序,不能attatch 上远端的进程,没有源码,VC6的远端调试就不灵了。
听说VS2005 能attatch 远端进程,就转攻VS2005.。
VS2005 双机调试也搞定了,也有一番曲折,相比VC6 要容易一些,由于VS2005 能attatch 远端进程,就把它贴出来吧。
令遇到相同问题的朋友少花点时间。
由于权限不够,我就不贴图了。

(1) 本地: 安装VS2005, 很顺利,不会有问题
        启动vs2005, 选菜单tools->attatch to process
        在对话框中qualifier(限制)中填入远端主机名例如: pc-test
        结果出现错误框,大意是远端服务器msvsmon.exe 没有远行,要我看帮助。
        这是意料之中的事。  不过微软的帮助我可不想看。
        第二步,我们解决调试服务器的事
       
(2) 远程端: 运行调试服务器
             将本地端的"Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86\msvsmon.exe"
             拷贝到远程端随便一个位置,用u盘, 网络随你便了。要是vc6, 除了远行文件还有一大堆dll要copy
             运行msvsmon.exe, 弹出一个警告框,告诉你debug moniter 不能debug 程序,问是否继续,
             那就继续吧,果然,进去后,从本地端无论如何也连不上远程端。
             看来必须要解决警告框问题。
             仔细看一下警告内容,英文不好,猜其大意,是说本地安全策略是"guest only",请求都是 guest,所以必须要解决权限问题。
             
(3) 远程端:系统权限问题-解除警告框
        一大堆的安全选项,到底找谁呢? 结合这提示找吧。这时我在想,如果用英文windows 会好一点,中文还要翻译呀。
        最后,将“本地安全策略 - 安全选项 - 网络访问:本地帐户的共享和安全模式”改为:经典-本地用户以自己的身份验证。
        这时运行调试服务器,没有警告框了。
       
        但是从本地端还是连接不上,错误提示仍然是:远端服务器msvsmon.exe 没有远行,这就有点奇怪了。
        观察Remote debuger monitor 输出,说它启动了一个服务器叫hjj@pc-test, 在本地对话框中qualifier中填入
        服务器名hjj@pc-test,出来了另一个错误提示,拒绝访问。
        这个错误说明它已经知道服务器再运行,只是服务器拒绝了它。看来还是权限问题
       
        在服务器的tools -- option -- permission 中,折腾一个遍居然加不进本地的机器名。
        几乎没有办法了,看帮助文档,昏昏然也没有理解,查百度,也没查清楚。只差最后一步了。。。看来
        再看帮助security help, 有一个 windows authentication mode 和 No authentication mode. 看其意思是说
        windows authentication mode安全,千万千万别用No authentication mode。
        难道就此打住吗? 我相信已经有很多人解决了这个问题了,一定可以解决。剩下的是goole 和help 文档及test了。
        微软的帮助确实有点shit, 他要写成象我这样,用不了长篇大论就能让你搞定了。或者至少要有这么一份文档。
       
(4)远程端: 服务器权限问题,令所有用户访问。
        回到服务器,查其option 选项,果然看到默认选择是windows authentication, 我也没办法了,选No authentication mode
        还有一个选择框,勾选allow any user to debug.  谁连都欢迎,连不上,安全有什么用!
        点ok, 服务器窗口还提示警告 不安全,不安全。。。甭离它。
       
(5) 本地端:最后的成功,还有点曲折。
          在VS2005中,“工具”--“附加到进程”,传输选“远程”,
        tranport: Default
        qualifier: 远端主机名(例如pc-test) 或者远端服务器名pc-test:4015
        还是连不上,但是出来了新的错误框,前两条是废话,后一条可以借鉴,要求我们把transport 改为
        Remote(native only with no authentication), 按它的意思改吧,把qualifier填入远端主机名。
        呀!远端进程列表出来了。
        欲哭无泪,大半天过去了,5步乃是4步陷阱。帮助文档写得不好,报错机制还可以借鉴。
       
总结一下:
        1. copy msvsmon.exe 到远程机
        2. 远程机修改本地安全策略为 “经典-本地用户以自己的身份验证”
        3. 远程机msvsmon.exe运行,修改其连接选项为No authentication mode,enable all user
        4. 本地机trasport 改为Remote(native only with no authentication)。
        5. 本地机qualifier 填写远端主机名。
       
        要是MS 的作品什么都不改,填好远端主机名,端口号,一连就通,拿酒好了。
2008-5-7 17:37
0
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
该贴解决了windbg 用户态双机调试问题:
不解决windbg 用户态双机调试问题,对不起楼主也对不起读贴的朋友。
点击开始 - 程序 - debugtools for windows - debug help
阅读debugers 章节,当你读啊读,一章章,一篇篇忽然明白它在说什么时
再review 一下相关章节,就可以动手操作了。它不仅可以帮你解决这个文题
还能帮助你解决其它问题。

MS help 文档,我恨它也爱它...,建议你有时间要好好读一读。
言归正转,下面说windbg 用户态双机调试步骤。
有很多方法可以实现用户态双机调试,这只是方法之一。

1. 点击dbg_x86_6.9.3.113.msi安装debug tool,这恨简单,对,两台
   机器都安装。我的操作系统都是windows xp,将网络ping 通。
   
2. 服务器端开启服务进程,运行以下命令。
        a: 开启cmd 命令行窗口,进入c:\program files\debuggin tools for windows <x86>
        b: 执行命令: dbgsrv -t tcp:port=1025       
3. 服务器端查看被调试程序的进程ID.
        这是方法之一:
        右键点击任务条空白处弹出菜单,点击”任务管理器“项。
        点击任务管理器窗口菜单”查看“-”选择列“
        选中PID 进程标识符,点击”确定“
        窗口中显出了各进程的”PID",
        启动要调试的hello.exe, 查看其PID 为4060,记下这个数字。
4. 客户端启用调试进程windbg,运行以下命令。
        a: 开启cmd 命令行窗口,进入c:\program files\debuggin tools for windows <x86>       
        b: 启用windbg,敲入命令: windbg -premote tcp:server="服务器主机名",port=1025 -p 4060
        说明一下:
        -premote, 意思是说,客户端要建立一个smartclientport, 它能于dbgsrv 进程相连接。
        tcp 是tcp 协议
        ”服务器主机名“,不要逐字敲,要换成你的服务器名字,例如我的是hjj-test,你的是别的名字。
        port=1025 是端口号,与服务器的端口号要一样
        -p 4060 指要调试的远程端的进程ID, 就是在服务器端查看的那个,记得要修改这个值啊。

当你敲入回车之后,windbg 启动,在它的cmd 窗口里滚过一堆信息,是它在加载dll,然后提示你符号文件没有发现,,我这个运行程序无符号,这里不谈符号问题。然后是
        ntdll!DbgBreakPoint:
        7c921230 cc              int     3
        debugger 已经成功断下被调试进程,下面你就可以开始调试拉。

总结一下:你要理解命令行各参数的意义,做相应替换
        1. 服务器端:dbgsrv -t tcp:port=“端口号值”
        2. 客户端:  windbg -premote tcp:server="服务器主机名",port=“端口号值” -p “被调试进程ID"
        区区两条命令,搞定windbg 用户态双机调试。这真是会者不难,难者不会,为这两条命令,我可找你好苦啊!
糟啦, 这两天只顾搞调试,都耽误我工作了,赶紧忙去吧。
2008-5-8 09:28
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
4
用VMWare串口,不是很容易双机调试吗
2008-5-27 14:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
可惜vm的tool麻烦,系统占用高
2008-6-10 03:16
0
雪    币: 107
活跃值: (12)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
两个屏幕看多爽啊,一边看,一边调,互不影响。
可惜windbg 双机调试我就搞到这就中断了,没有继续往下做。
哎! 没办法。事不随人意呀!
2008-6-11 20:58
0
游客
登录 | 注册 方可回帖
返回
//