日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Bochs调试加载符号文件的问题

發(fā)布時(shí)間:2025/3/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Bochs调试加载符号文件的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. Bochs中的調(diào)試命令ldsym沒有觸發(fā)的情況。

參考: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/YaccRefer: http://en.wikipedia.org/wiki/GNU_bisonhttp://en.wikipedia.org/wiki/Flex_lexical_analyserhttp://www.cnblogs.com/me115/archive/2010/10/27/1862180.html?.l與.y文件的大致格式類似,都是以%%開分隔符,將整個(gè)文件分成幾個(gè)區(qū),其中最重要的都是規(guī)則定義區(qū)。 ?查看到lexer.l中相關(guān)語句: ldsym { bxlval.sval = strdup(bxtext); return(BX_TOKEN_LOAD_SYMBOLS); }??

parser.y中相關(guān)語句:

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會(huì)被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: }

當(dāng)我們輸入:

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用引號(hào)括起來的,因此我們嘗試:

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

這回成功了。

?

我們?cè)O(shè)置斷點(diǎn),

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:?

這回調(diào)試內(nèi)核變得友好多了。

?

2. 在VS2012環(huán)境下為什么總會(huì)出現(xiàn)CL.exe錯(cuò)誤

先使用如下方法查看CL.read1.log被哪些進(jìn)程占用

參考:

openfiles用于查看各個(gè)進(jìn)程所打開的文件。windows自帶工具。必須先用openfiles /local on 命令啟用系統(tǒng)全局標(biāo)志“維護(hù)對(duì)象列表”;再重啟后執(zhí)行openfiles查看各進(jìn)程文件。http://blog.csdn.net/laurawan/article/details/8080240

直接調(diào)試parser.c/lexer.c時(shí),無法設(shè)置斷點(diǎn)。

解決方法:將所有#line行都注釋掉。

3. 根據(jù)System.map生成符號(hào)文件

?

如何通過System.map得到Bochs支持的符號(hào)文件?

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腳本,自動(dòng)化調(diào)試過程

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=1234boot:disklog: log.txtdebugger_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"cu /20rsregx/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處再停下來

轉(zhuǎn)載于:https://www.cnblogs.com/long123king/p/3568575.html

總結(jié)

以上是生活随笔為你收集整理的Bochs调试加载符号文件的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。