Bochs调试VT代码环境搭建.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Bochs调试VT代码环境搭建.doc

Bochs+Windbg调试VT代码 准备工具: Windbg 6.12 bochs-2.4.6-msvc-src(/projects/bochs/files/bochs/2.4.6/) vmware. Securable (检查是否开启VT的) VC 2008. Intel?vt技术十分诱人,但是如何调试vt却是让人头疼#define BX_SUPPORT_VMX 0 改成 #define BX_SUPPORT_VMX 1 或者 #define BX_SUPPORT_VMX 2 2, 编译.你会发现bx_cpu_c::init_VMCS(),?vmcs_field_offset()等link error! 解决方法: 将cpu\vmcs.cc加进工程就可以了 3, 到现在bochs已经编译出来了,接下来就是安装系统.bochs太慢,使用vmware装把.具体步骤参考三寸法师的文章(/showthread.php?p=964315).装完后用Securable检测下看是否支持vt.再加上调试模式(修改boot.ini...不多说,不知道的可以搜一下vmware+debug调试)发现绿色的YES,好了支持了,不过还有问题,见下文. 4, bochs 支持串口, 用Windbg连接bochs进行源码调试吧.在bochs的配置文件中加一句 com1: enabled=1, mode=pipe_server, dev=”\\.\pipe\bochs” 然后运行虚拟机,会发现bochs会一直在等待,这时打开windbg连接\\.\pipe\bochs .嗯,bochs开始运行了.选择调试模式,好吧.windbg直接退了.有木有.有木有.如果是windbg 6.09你就发现他不会退出而是没啥反应. 5, 看了下bochs中串口的实现,是同步的(难道是因为这个退出的?),翻了下virtualbox的串口的代码发现确实异步,开了读写线程。好吧,看到网上有用bochs调试wrk的一篇文章wrk源码分析之WinDbg+Bochs调试,里面给出了段代码(注:这个代码我改了下发现这段代码在想串口写数据的时候锁死了, 修改及其原版代码见附件)用这个试试. 将其代码加到项目文件中.然后在serial.h中的bx_serial_t定义中添加一变量(红色字体部分): int io_mode; int tty_id; SOCKET socket_id; FILE *output; #ifdef WIN32 HANDLE pipe; void* p_cls_our; #endif #if USE_RAW_SERIAL serial_raw* raw; #endif 然后在serial .cc文件中的bx_serial_c::init(void)添加(红色部分) 这里我们添加了一个模式”pipe”具体设置见后面: 略… if (server) { pipe = CreateNamedPipe( dev, PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, 1, 4096, 4096, 0, NULL); if (pipe == INVALID_HANDLE_VALUE) BX_PANIC((com%d: CreateNamedPipe(%s) failed, i+1, dev)); BX_INFO((com%d: waiting for client to connect to %s, i+1, dev)); if (!ConnectNamedPipe(pipe, NULL) GetLastError() != ERROR_PIPE_CONNECTED) { CloseHandle(pipe); pipe = INVALID_HANDLE_VALUE; BX_PANIC((com%d: ConnectNamedPipe(%s) failed, i+1, dev)); } } // client mode else { if ( strcmp(mode, pipe) == 0 ){ BX_INFO((!!!!!!into our code!!!!!!!)); serial_pipe* our_serial = new serial_pipe(dev); BX_SER_THIS s[i].p_cls_our = our_serial; }else{ p

文档评论(0)

ailuojue3 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档