热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

终于能够在GDB+qemu进行跟踪和调试了

经过几天努力,终于能够在GDB+qemu进行跟踪和调试了,但是现在只能调试ntoskrnl,还不知到,freeldr怎么跟踪调试-----------------------------

经过几天努力,终于能够在GDB+qemu进行跟踪和调试了,但是现在只能调试ntoskrnl,还不知到,freeldr怎么跟踪调试

---------------------------------------------------------------------------------------------------------------------------------

快一年了,当重新用GDB+qemu进行跟踪和调试reactos时,居然遇到了几多问题,花了几天时间才把问题理顺,所以决定这一次把这些经验记录下来,方便以后查询,同时也谈谈怎么调试freeldr部分:

 

1. 准备调试版的reactos:

 

基于config.template.rbuild生成一份新的文档,命名config.rbuild,修改如下两个地方:

 

   //去掉优化

 

          //启用GDB调试

 

然后再builder环境中:

make clean  //清除所有的文件

make ROS_BUILDNOSTRIP=yes bootcd  生成带调试信息的reactos,

 

2. 启动qemu,注意要带上-s -S两个参数如:

qemu -L . -m 256 -hda d:/reactos.img -cdrom d:/reactos/reactos.iso -boot d -s -S

这时qemu启动时会等候gdb 客户端的连接

 

3。启动gdb

 

在gdb调试环境中先后执行:

gdb>directory .          //这里有一个技巧,先把进入到reactos源码目录, 这时候设定目录就不用敲很长的字符了,只敲一个“.”即可

gdb>file   output-i386/ntoskrnl/ntoskrnl.nostrip.exe           //假设要调试ntoskrnl模块,可用file命令代入ntoskrnl符号文件

gdb>b *0x80801000                                                          //在ntoskrnl模块入口设定断点

gdb>target remote localhost:1234                                    //连接gdb server

gdb>c                                                                                //继续运行

 

这时候就看到程序停在boot.S 处:

 

 

这时候就可以执行任何调试命令,如l(list), ni(单步执行)

 

 

 

 

小插曲:qemu-0.12.3 版支持gdb 调试有问题,程序跟踪时其执行顺序是非预期的,我花了几天时间才找到问题缘由,曾一度怀疑是reactos编译环境有问题,幸喜找到去年编译的那一版,通过比较才把问题找到,qemu-0.12.5版经测试是ok的。

 

4。调试freeldr,

 

  修改生成的makefile.auto, 查找freeldr_target,setupldr_target,在周围寻找

 

     -@${rm} $(TEMPORARY)/setupldr.junk.tmp 2>$(NUL)

    -@${rm} $(TEMPORARY)/freeldr.junk.tmp 2>$(NUL)

 

通过#,把这两行注释掉,然后分别执行:

 

make setupldr_clean

make setupldr

make freeldr_clean

make freeldr

 

这时在obj-i386(也即$(TEMPORARY))目录下能看到setupldr.junk.tmp ,freeldr.junk.tmp ,这两个文件可在gdb下直接装入:

 

gdb> file obj-i386/setupldr.junk.tmp  

 

这样就可以跟踪调试reactos的启动部分代码了!

 

 

 

 


推荐阅读
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 源码安装Nginx 解决报错
    CentOS8源码安装Nginx编译安装注意事项如果安装时不是使用的默认路径,则必须要修改PATH环境变量,以能够识别此程序的二进制文件路径 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • Howtobuilda./configure&&make&&makeins ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 这是因为protobuf和pillow没有安装,或者是通过apt-get安装的。使用pip重新安装一遍即可解决问题。删除caffe-mast(提前保存Makefile.config和M ... [详细]
author-avatar
灰灰t2502911555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有