Bochs调试加载符号文件的问题
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调试加载符号文件的问题的更多相关文章
- 【逆向工具】IDA使用1-VS2015版本debug查找Main函数,加载符号文件
IDA 常见操作 空格,切换反汇编视图 选择CALL或是跳转 进入函数内部或是跳转处 返回键 ESC daq.exe 分析32位程序 ,生成的IDA数据库文件是 .idb Idap64.exe 分析6 ...
- Unity3D在移动平台下加载AssetBundle导致Shader效果不正确的问题
这个问题,主要还是在移动平台下开发导致的. 在编辑器里调试加载AB时会导致Shader效果不正确的原因,主要还是编辑器下加载以IOS或是ANDROID平台打包的AB它所使用的shader已经编译成对应 ...
- VS2010 release编译下进行调试,“当前不会命中任何断点,还没有为文档加载”问题解决方案
在release模式下调试程序,经常出现"当前不会命中任何断点,还没有为文档加载"的问题,可尝试以下方法: 1. 属性 → 配置属性 → C/C++ → 常规 → 调试信息格式:选 ...
- CAD调试时抛出“正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码”异常的解决方法
这些天重装了电脑Win10系统,安装了CAD2012和VS2012,准备进行软件开发.在调试程序的时候,CAD没有进入界面就抛出 “正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain ...
- VS2015开发Android,自带模拟器无法调试、加载程序,算是坑吗
VS2015出来后,确定变化很大,什么android.ios的,不在话下.对于我这样传统型的人,也第一时间试用了一下(vs2003->vs2008->vs2012->vs2015). ...
- ASP.NET MVC3 Razor 调试与预加载
目录(?)[-] 获取服务器信息 FormsAuthenticationSlidingExpiration 属性 MVC3预加载 在ASP.NET MVC3开发中,调试中怎么也是不可缺少的,那对于 ...
- 使用Ajax异步加载页面时,怎样调试该页面的Js
前言-本人不是干前端的,所以有的名词不专业 在前端中,有时候会遇到这样的框架,http://172.17.11.151:8060/frontend/backend.html#1.html (通过解析U ...
- Windows7 安装vs2015 之后 调试Web项目IIS启动不了 aspnetcore.dll未能加载
安装windows企业版,整整折腾了两天了,一个本身家里网络环境不好,时不时掉线,终于披荆斩棘,克服了所有困难,结果VS2015 EnterPrise 版本在调试Web环境的时候,始终在任务栏里找不到 ...
- KEngine:Unity3D资源的打包、加载、调试监控
资源模块做什么? 资源模块——ResourceModule,是KEngine中最核心的模块,其他模块基本或多或少的对它有依赖,它主要的功能是:资源打包.路径定义.资源管理.资源调试. 资源模块对Uni ...
随机推荐
- Nacos Config客户端与Spring Boot、Spring Cloud深度集成
目录 Nacos与Spring Boot集成 @NacosPropertySource和@NacosValue com.alibaba.nacos.spring.core.env.NacosPrope ...
- javascript函数调用的几种方式
function fn() { console.log(this.name); return "fn函数的返回值"; } /*1.方法调用*/ //方法调用,this指向win ...
- Pandas DataFrame操作
DataFrame的创建 >>> import pandas as pd >>> from pandas import DataFrame #define a di ...
- layui点击图片放大-多图显示
layui点击图片放大-多图显示 标签(空格分隔): js HTML // div <div id="photo-list"> <img class=" ...
- XSS注入方式和逃避XSS过滤的常用方法(整理)
(转自黑吧安全网http://www.myhack58.com/) web前端开发常见的安全问题就是会遭遇XSS注入,而常见的XSS注入有以下2种方式: 一.html标签注入 这是最常见的一种,主要入 ...
- git 处于游离的状态的解决办法
在idea下将代码回退到某一历史版本,修改后push提醒detaced head,即处于游离状态,使用 git branch命令(辅助git status查看提交状态)查看: 在git bash下切换 ...
- [已解决]报错: Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
问题: windows下安装Redis第一次启动报错: [2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0. ...
- log4j 和 log4j2 在springboot中的性能对比
文章链接: https://pengcheng.site/2019/11/17/log4j-he-log4j2-zai-springboot-zhong-de-xing-neng-dui-bi/ 前言 ...
- 查看linux防火墙的状态
如有需要可以加我Q群[308742428]大家一起讨论技术,有偿服务. 后面会不定时为大家更新文章,敬请期待. 喜欢的朋友可以关注下.iptables防火墙1.基本操作 # 查看防火墙状态 servi ...
- Invoke-Obfuscation混淆ps文件绕过Windows_Defender
前提 powershell只能针对win7之后的系统,之前的win操作系统默认没有安装powershell. 所在目录:C:\Windows\System32\WindowsPowerShell\v1 ...