第5章 在保護模式中呼叫C語言函式

2021-05-27 22:58:53 字數 1740 閱讀 7513

步驟:

1、設定ds、es、fs、gs、ss選擇符指向核心資料段;

2、呼叫main函式(main.c檔案中的main函式由c語言編寫)。

setup.s源**如下所示

.text

.global pm_mode

.include "kernel.inc"

.code32

.org 0

pm_mode:

movl $data_sel, %eax #核心資料段選擇符

movw %ax, %ds

movw %ax, %es

movw %ax, %fs

movw %ax, %gs

movw %ax, %ss #ds、es、fs、gs、ss的選擇符指向核心資料段,基址是0x00

movl $kernel_stack_bot,%esp #核心堆疊指向0x7c00

movl $msg, %esi # ds:esi = msg

movl $0xb8000, %edi # es:edi = 0xb8000, 視訊記憶體位址

movl %edi, %eax

addl $160, %eax

movl %eax, %edi # es:edi = 0xb8000 + 160, 螢幕第二行首位址

cldmovb $0x07, %ah # 字元屬性:黑底白字

print_c:

cmp $0, (%esi) #是否是字串結尾

je end

lodsb # ds:[esi] -> al, ++esi

stosw # ax -> es:[edi] , edi += 2, al=字元,ah=屬性

jmp print_c

end: call main

msg: .string "setuping.....\x0\x0\x0\x0"

.org 0x1fe, 0x90

.word 0xaa55

組合語言呼叫c語言函式的編譯方法是

#as -a boot.s -o boot.o > boot.map

#ld --oformat binary -n -e start -ttext 0x7c00 -o boot boot.o

#as -a setup.s -o setup.o > setup.map

#gcc -wall -pedantic -w -nostdlib -nostdinc -wno-long-long -i include -fomit-frame-pointer -c -o main.o main.c

#ld --oformat binary -n -e pm_mode -ttext 0x7e00 -o kernel setup.o main.o

建立虛擬軟盤檔案的方法是

#cat boot kernel > final.tmp

#dd if=/dev/zero of=final.img bs=1024 count=1440

#dd if=final.tmp of=final.img bs=1024 count=1440 conv=notrunc

切記main函式中必須要有死迴圈。

5 再探保護模式

參考 學習於網易雲課堂 linux作業系統,構建自己的核心,講師 coding迪斯尼 include pm.inc org 0x9000 jmp label begin section gdt 段基址 段長度 屬性 label gdt descriptor 0,0,0 label desc code...

保護模式7 呼叫門原理與實驗

呼叫門 無引數 呼叫門執行流程 長呼叫 構造乙個呼叫門 無引數 提權 0000ec00 00080000 基本的呼叫門結構開啟虛擬機器裡面的vs或者vc,建立乙個win32控制台程式 首先我們構造乙個函式,這個 將會具有0環的 許可權,我們在 裡直接讀取高2g記憶體的資料 include 如果無法使...

保護模式中的PDE與PTE

windows核心分析索引目錄 保護模式中的pde與pte 1.pde與pte的認知 我們在上一節,10 10 12模式中已經見過下表。pdt page direcotry table y頁目錄表,其中每乙個成員被稱為頁目錄表成員。ptt page table 頁表,其中每乙個成員被稱為頁表成員。頁...