簡體   English   中英

在引導加載程序中向/從內存存儲/讀取函數指針符號地址

[英]Storing/reading a function pointer symbol address to/from memory in a bootloader

我是組裝的新手,所以這似乎是一個簡單的問題。
因此,通過匯編,我試圖將一個函數的內存地址存儲到內存中,如下所示:

my_function:
  mov al, "a" ; Some code
  int 0x10
mov word [0x7e04], my_function ; Storing the address to my_function into 0x7e04

然后我想在像這樣從內存中讀取它后跳轉到該內存地址:

jmp [0x7e04]

但是它不起作用。 是不是因為它只讀取字節 0x7e 而不是 04? 如果是這樣,我如何才能從內存中讀取一個單詞而不僅僅是一個字節?

編輯:所以這是不起作用的代碼(是的,它是一個引導加載程序):

mov ah, 0x0e

mov al,"H"
int 0x10

mov word [0x7e04],my_function
jmp [0x7e04]

my_function:
  mov al, "i"
  int 0x10
times  510-($-$$) db 0
dw 0xaa55 

所以我用nasm -f bin -o boot.bin boot.asm編譯它,然后用qemu-system-i386 boot.bin模擬它,但沒有任何顯示,並且 BIOS 中斷 0x10 正在工作,所以我這里有點困惑為什么代碼不起作用

由於沒有 ORG 語句,程序從地址 0 開始匯編。“my_function”的地址是 000f,但在 7c0f 處加載。 JMP 指令跳轉到 000f。 如果 CS 包含 07c0,這將起作用。 或者,使用 ORG 7c00 並將 CS 設置為 0。(要更改 CS,請執行遠呼叫。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM