欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

X86匯編調(diào)試環(huán)境搭建的過程

 更新時間:2021年11月10日 11:52:25   作者:Thinker 123  
本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),還有一個hexdump for VSCode。 安裝NASM,并添加到環(huán)境變量,下面看下X86匯編調(diào)試環(huán)境搭建的過程吧

最近畢設(shè)需要做一個基于X86的微型OS內(nèi)核,一直在學(xué)習(xí)匯編,前來記錄一下

匯編環(huán)境搭建

本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),還有一個hexdump for VSCode。
安裝NASM,并添加到環(huán)境變量
安裝QEMU,并將其添加到環(huán)境變量下

編寫代碼:(代碼來自30天自制操作系統(tǒng))

; hello-os
; TAB=4

; 標(biāo)準(zhǔn)FAT12格式軟盤專用的代碼 Stand FAT12 format floppy code

        DB      0xeb, 0x4e, 0x90
        DB      "HELLOIPL"      ; 啟動扇區(qū)名稱(8字節(jié))
        DW      512             ; 每個扇區(qū)(sector)大小(必須512字節(jié))
        DB      1               ; 簇(cluster)大小(必須為1個扇區(qū))
        DW      1               ; FAT起始位置(一般為第一個扇區(qū))
        DB      2               ; FAT個數(shù)(必須為2)
        DW      224             ; 根目錄大?。ㄒ话銥?24項)
        DW      2880            ; 該磁盤大?。ū仨殲?880扇區(qū)1440*1024/512)
        DB      0xf0            ; 磁盤類型(必須為0xf0)
        DW      9               ; FAT的長度(必須是9扇區(qū))
        DW      18              ; 一個磁道(track)有幾個扇區(qū)(必須為18)
        DW      2               ; 磁頭數(shù)(必須是2)
        DD      0               ; 不使用分區(qū),必須是0
        DD      2880            ; 重寫一次磁盤大小

        ; 書中作者說原因不明的兩行代碼我查到了,see https://www.ntfs.com/fat-partition-sector.htm
        DB      0               ; BPB_Physical_Disk_Number    DB   (This is related to the BIOS physical disk number. Floppy drives are numbered starting with 0x00 for the A disk. Physical hard disks are numbered starting with 0x80. The value is typically 0x80 for hard disks, regardless of how many physical disk drives exist, because the value is only relevant if the device is the startup disk.)
        DB      0               ; BPB_Current_Head            DB   (Not used by FAT file system)
        DB      0x29            ; BPB_Signature               DB   (Must be either 0x28 or 0x29 in order to be recognized by Windows NT.)
        DD      0xffffffff      ; BPB_Volume_Serial_Number    DD



        DB      "HELLO-OS   "   ; 磁盤的名稱(必須為11字節(jié),不足填空格)
        DB      "FAT12   "      ; 磁盤格式名稱(必須是8字節(jié),不足填空格)
        TIMES   18  DB 0        ; 先空出18字節(jié)

; 程序主體

        DB      0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
        DB      0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
        DB      0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
        DB      0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
        DB      0xee, 0xf4, 0xeb, 0xfd

; 信息顯示部分

        DB      0x0a, 0x0a      ; 換行兩次
        DB      "hello, world"
        DB      0x0a         ; 換行
        DB      0

        TIMES   0x1fe-($-$$) DB 0x00         ; 填寫0x00直到0x001fe

        DB      0x55, 0xaa

; 啟動扇區(qū)以外部分輸出

        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        TIMES   4600    DB 0
        DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
        TIMES   1469432 DB 0
; 只是把 RESB 20 改成了 TIMES 20 DB 0

編譯命令
vscode寫好后直接終端運行

nasm -f bin day1.asm -o day1.img

-f指定輸出格式為bin,本次生成的是img文件,因為后續(xù)調(diào)試要用,當(dāng)然也可以生成其他類型文件

運行命令

qemu-system-i386 day1.img

運行結(jié)果:

在這里插入圖片描述

調(diào)試環(huán)境搭建

調(diào)試匯編我們一般用bochs軟件調(diào)試
下載鏈接

進(jìn)入安裝目錄找到一個叫bochsdbg。exe的程序,我們調(diào)試主要用到這個程序
打開即可看到如下界面

在這里插入圖片描述

在白色menu框中點擊Disk & Boot選項,選擇ATA channel 0下的First HD/CD on channel

在這里插入圖片描述

修改如下參數(shù)

在這里插入圖片描述

第一個指定為磁盤
第二個指定img文件路徑
Heads:磁頭數(shù)
Sectors per track :每磁道有幾個扇區(qū)
這些參數(shù)其實是由上文的程序指定的程序指定的

DW      18              ; 一個磁道(track)有幾個扇區(qū)(必須為18)
DW      2               ; 磁頭數(shù)(必須是2)

之后點擊Boot Options中的boot drive設(shè)置為disk即可

在這里插入圖片描述

點擊ok后會退到Bochs start menu菜單, 點擊start即可啟動調(diào)試
這里展示了一下

在這里插入圖片描述

注意最下面的s 其實就是單步調(diào)試的意思,還有注意的是展示的一行匯編代碼實際是未運行的,是下次運行的,比如這里的

jmpf 0xf000:e05b

實際未運行,需要輸入s才能運行這一步

如果想要跳轉(zhuǎn)個某個地址呢 比如0x7c00,該怎么辦呢?
輸入 b 0x7c00 b就是打斷點 運行一下
再輸入c就是continue繼續(xù)的意思即可跳轉(zhuǎn)到這
想要退出的話需要輸入2次q即可
后續(xù)有什么命令在繼續(xù)補充吧

需要注意的是匯編代碼必須加前面那個fat代碼,不然bochs無法調(diào)試,還有另一種方法是用FixVhdw,這個方法可以去參考B站UP譚玉剛的視頻。這個軟件是X86匯編 從實模式到保護(hù)模式的作者寫的。

到此這篇關(guān)于X86匯編調(diào)試環(huán)境搭建的文章就介紹到這了,更多相關(guān)X86匯編調(diào)試環(huán)境內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 匯編語言中的segment

    匯編語言中的segment

    segment是段的意思,是段定義偽指令,一個正常的應(yīng)用程序被由若干個 segment組成,接下來通過本文給大家介紹匯編語言中的segment,需要的朋友可以參考下
    2020-01-01
  • os_object_release Crash 排查記錄分析

    os_object_release Crash 排查記錄分析

    這篇文章主要為大家介紹了os_object_release Crash 排查記錄分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 匯編語言指令集之條件轉(zhuǎn)移指令實現(xiàn)

    匯編語言指令集之條件轉(zhuǎn)移指令實現(xiàn)

    這篇文章主要介紹了匯編語言指令集之條件轉(zhuǎn)移指令實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編指令:JO、JNO、JB..的使用方法

    匯編指令:JO、JNO、JB..的使用方法

    這篇文章主要介紹了匯編指令:JO、JNO、JB..的使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • ARM體系下的GCC內(nèi)聯(lián)匯編教程詳解

    ARM體系下的GCC內(nèi)聯(lián)匯編教程詳解

    在操作系統(tǒng)級的編程中,有時候,C語言并不能完全的使用硬件的功能,這時候就需要嵌入一些匯編代碼來實現(xiàn)功能。這篇文章主要介紹了ARM體系下的GCC內(nèi)聯(lián)匯編,需要的朋友可以參考下
    2020-02-02
  • X86匯編調(diào)試環(huán)境搭建的過程

    X86匯編調(diào)試環(huán)境搭建的過程

    本次使用vscode搭建的,需要的插件有X86 and X86_64 Assembly(也可以使用masm插件),還有一個hexdump for VSCode。 安裝NASM,并添加到環(huán)境變量,下面看下X86匯編調(diào)試環(huán)境搭建的過程吧
    2021-11-11
  • 16位匯編語言寄存器及指令整理(小結(jié))

    16位匯編語言寄存器及指令整理(小結(jié))

    這篇文章主要介紹了16位匯編語言寄存器及指令整理(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編實現(xiàn)的memcpy和memset的方法

    匯編實現(xiàn)的memcpy和memset的方法

    這篇文章主要介紹了匯編實現(xiàn)的memcpy和memset的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 用匯編語言實現(xiàn)從1加到100的方法(1+2+...+100)

    用匯編語言實現(xiàn)從1加到100的方法(1+2+...+100)

    這篇文章主要介紹了用匯編語言實現(xiàn)從1加到100的方法(1+2+...+100),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編語言乘指令 MUL、IMUL的具體使用

    匯編語言乘指令 MUL、IMUL的具體使用

    這篇文章主要介紹了匯編語言乘指令 MUL、IMUL的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論