1. Bochs中的调试命令ldsym没有触发的情况。

参考:http://www.ibm.com/developerworks/cn/linux/sdk/lex/

Lex 代表 Lexical Analyzar。Yacc 代表 Yet Another Compiler Compiler

参考:http://www.cnblogs.com/cuishengli/p/3346148.html

Bison/Flex/Yacc
Refer: http://en.wikipedia.org/wiki/GNU_bison
http://en.wikipedia.org/wiki/Flex_lexical_analyser
http://www.cnblogs.com/me115/archive/2010/10/27/1862180.html
 
.l与.y文件的大致格式类似,都是以%%开分隔符,将整个文件分成几个区,其中最重要的都是规则定义区。 
 
查看到lexer.l中相关语句:
ldsym           { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LOAD_SYMBOLS); }

 

 

parser.y中相关语句:

   1: symbol_command:

   2:       BX_TOKEN_LOAD_SYMBOLS BX_TOKEN_STRING '\n'

   3:       {

   4:         bx_dbg_symbol_command($2, 0, 0);

   5:         free($1); free($2);

   6:       }

   7:     | BX_TOKEN_LOAD_SYMBOLS BX_TOKEN_STRING BX_TOKEN_NUMERIC '\n'

   8:       {

   9:         bx_dbg_symbol_command($2, 0, $3);

  10:         free($1); free($2);

  11:       }

  12:     | BX_TOKEN_LOAD_SYMBOLS BX_TOKEN_GLOBAL BX_TOKEN_STRING '\n'

  13:       {

  14:         bx_dbg_symbol_command($3, 1, 0);

  15:         free($1); free($2); free($3);

  16:       }

  17:     | BX_TOKEN_LOAD_SYMBOLS BX_TOKEN_GLOBAL BX_TOKEN_STRING BX_TOKEN_NUMERIC '\n'

  18:       {

  19:         bx_dbg_symbol_command($3, 1, $4);

  20:         free($1); free($2); free($3);

  21:       }

  22:     ;

可见,ldsym会被lexer解析成BX_TOKEN_LOAD_SYMBOLS,而ldsym的一般语法为ldsym str, 即
   1: | BX_TOKEN_HELP BX_TOKEN_LOAD_SYMBOLS '\n'

   2:   {

   3:     dbg_printf("ldsym [global] <filename> [offset] - load symbols from file\n");

   4:     free($1);free($2);

   5:   }

当我们输入:

   1: <bochs:1> ldsym linux.sym

   2: :1: syntax error at 'linux'

   3: <bochs:2>

因此,是BX_TOKEN_STRING解析有问题:

   1: \'([^\\\'\n]|(\\.))*\'    |       /* throw away leading and trailing \" */

   2: \"([^\\\"\n]|(\\.))*\"    { bxlval.sval = strdup(bxtext+1); bxlval.sval[strlen(bxlval.sval)-1] = 0; return(BX_TOKEN_STRING); }

可见,这里是需要将string用引号括起来的,因此我们尝试:

   1: <bochs:2> ldsym "linux.sym"

   2: <bochs:3>

这回成功了。

我们设置断点,

   1: <bochs:3> lb "start_kernel"

   2: <bochs:4> c

   3: (0) Breakpoint 1, 0x00000000c17bc411 in ?? ()

   4: Next at t=605611780

   5: (0) [0x0000017bc411] 0060:00000000c17bc411 (start_kernel+0): push ebp                  ; 55

   6: <bochs:5> s

   7: Next at t=605611781

   8: (0) [0x0000017bc412] 0060:00000000c17bc412 (start_kernel+1): mov ebp, esp              ; 89e5

   9: <bochs:6> s

  10: Next at t=605611782

  11: (0) [0x0000017bc414] 0060:00000000c17bc414 (start_kernel+3): push ebx                  ; 53

  12: <bochs:7> s

  13: Next at t=605611783

  14: (0) [0x0000017bc415] 0060:00000000c17bc415 (start_kernel+4): sub esp, 0x00000018       ; 83ec18

  15: <bochs:8> s

  16: Next at t=605611784

  17: (0) [0x0000017bc418] 0060:00000000c17bc418 (start_kernel+7): call .-22 (0xc17bc407)    ; e8eaffffff

  18: <bochs:9> s

  19: Next at t=605611785

  20: (0) [0x0000017bc407] 0060:00000000c17bc407 (smp_setup_processor_id+0): push ebp                  ; 55

  21: <bochs:10>

  22:  

  23:  

这回调试内核变得友好多了。

2. 在VS2012环境下为什么总会出现CL.exe错误

先使用如下方法查看CL.read1.log被哪些进程占用

参考:

openfiles
用于查看各个进程所打开的文件。windows自带工具。
必须先用openfiles /local on 命令启用系统全局标志“维护对象列表”;
再重启后执行openfiles查看各进程文件。
http://blog.csdn.net/laurawan/article/details/8080240

直接调试parser.c/lexer.c时,无法设置断点。

解决方法:将所有#line行都注释掉。

3. 根据System.map生成符号文件

如何通过System.map得到Bochs支持的符号文件?

   1: $ sudo cp /boot/System.map-3.0.0-12-generic System.map

   2: $ sudo awk '{print "0x"$1,$3}' System.map | sudo tee linux.sym

   3:  

4. 编写debug脚本,自动化调试过程

Bochs支持debug脚本,我们可以编写如下脚本:

daniel@ubuntu:~/bochs/symbolbank$ cat bxrc_triumph

ata0-master: type=disk, path="triumph.img", cylinders=50, heads=16, spt=63

#gdbstub:enabled=1, port=1234

boot:disk

log: log.txt

debugger_log: log_debug.txt

daniel@ubuntu:~/bochs/symbolbank$ cat script_debug

ldsym "linux.sym"

lb "start_kernel"

lb "rest_init"

lb "kernel_init"

lb "init_post"

c

u /20

r

sreg

x/16bx eax

 

daniel@ubuntu:~/bochs/symbolbank$ cat debug.sh

#/bin/sh

 

bochs -q -f bxrc_triumph -rc script_debug

 

daniel@ubuntu:~/bochs/symbolbank$ sudo bash ./debug.sh

这样就可以让Bochs直接跑到start_kernel处再停下来

Bochs调试加载符号文件的问题的更多相关文章

  1. 【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件

    IDA 常见操作 空格,切换反汇编视图 选择CALL或是跳转 进入函数内部或是跳转处 返回键 ESC daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb Idap64.exe 分析6 ...

  2. Unity3D在移动平台下加载AssetBundle导致Shader效果不正确的问题

    这个问题,主要还是在移动平台下开发导致的. 在编辑器里调试加载AB时会导致Shader效果不正确的原因,主要还是编辑器下加载以IOS或是ANDROID平台打包的AB它所使用的shader已经编译成对应 ...

  3. VS2010 release编译下进行调试,“当前不会命中任何断点,还没有为文档加载”问题解决方案

    在release模式下调试程序,经常出现"当前不会命中任何断点,还没有为文档加载"的问题,可尝试以下方法: 1. 属性 → 配置属性 → C/C++ → 常规 → 调试信息格式:选 ...

  4. CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法

    这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...

  5. VS2015开发Android,自带模拟器无法调试、加载程序,算是坑吗

    VS2015出来后,确定变化很大,什么android.ios的,不在话下.对于我这样传统型的人,也第一时间试用了一下(vs2003->vs2008->vs2012->vs2015). ...

  6. ASP.NET MVC3 Razor 调试与预加载

    目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载   在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...

  7. 使用Ajax异步加载页面时,怎样调试该页面的Js

    前言-本人不是干前端的,所以有的名词不专业 在前端中,有时候会遇到这样的框架,http://172.17.11.151:8060/frontend/backend.html#1.html (通过解析U ...

  8. Windows7 安装vs2015 之后 调试Web项目IIS启动不了 aspnetcore.dll未能加载

    安装windows企业版,整整折腾了两天了,一个本身家里网络环境不好,时不时掉线,终于披荆斩棘,克服了所有困难,结果VS2015 EnterPrise 版本在调试Web环境的时候,始终在任务栏里找不到 ...

  9. KEngine:Unity3D资源的打包、加载、调试监控

    资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...

随机推荐

  1. Oracle之Group by和Having-----转了

    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条 ...

  2. python学习笔记:模块——os模块(操作文件/目录)

    import os os.rename(old,new) #重命名文件或目录 os.remove(f)#删除文件 os.mkdir('china/beijing') #创建文件夹 os.makedir ...

  3. Linux(二)—— Linux配置及指令

    目录 Linux配置及指令 一.linux中常用软件的安装 二.主机名和网络 1.修改主机名 2.设置网络 三.关闭防火墙 1.检查防火墙是否开启 2.清除策略 3.永久关闭第一个防火墙 4.关闭第二 ...

  4. Electron 常见问题

    导读: 以下记录了作者在实践中遇到的问题和最后的解决方法,如果有错误或者更新更完美的解决方案,欢迎留言指正.交流. 1.jQuery/RequireJS/Meteor/AngularJS 的问题 jQ ...

  5. CF1216X

    由于rating限制,和慎老师用小号打了一场div 3 从A到F都没啥思维含量..感觉最难想的就是C了?? CF1216C 考完以后想hack一下这道题,然后发现满屏都是分类讨论 我大概是写不动 or ...

  6. LinkButton(按钮)组件

    一.//class加载方式 <div id="pos" class="easyui-linkbutton">按钮</div> 二.js加 ...

  7. 搜索solr

    这是我第一次写博客,没有系统性.专业性,东西很杂,也不知道自己在写些什么. SOA分布式架构,所以,使用solr,搜索层的服务层需要搭建起来.搜索系统的表现层搭建 ,打包方式是war包 域名改变代表系 ...

  8. aarch64 架构 交叉编译 tcpdump

    1. 下载 tcpdump 源码 地址 :http://www.tcpdump.org/    (4.9.2) tcpdump 依赖 libpcap  源码 地址 : http://www.tcpdu ...

  9. Web server failed to start. Port 8080 was already in use.

    Description: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the ...

  10. 使用navigator.userAgent来判断浏览器类型

    var br=navigator.userAgent.toLowerCase(); var browserVer=(br.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ...