用nasm編譯16位的elf檔案

來源:互聯網
上載者:User

  文檔裡說到nasm在輸出elf目標檔案時,具備16位段的擴充能力(眾所周知elf只有32位和64位格式)。不知道官方這句話真的假的,反正目前我試過兩種情形會失敗:

  情形1——16位實模式下,通過int 13h將磁碟片上的kernel.elf檔案載入到80000h地址處,找到elf的入口地址,然後跳進去,結果代碼執行錯誤,輸入"u/10 entry"(entry是在調試時候慢慢算出來的)反組譯碼一看,入口處的指令奇形怪狀,跟kernel.asm不一樣。我懷疑16位實模式下,使不能執行elf檔案中的指令的。下面貼出來kernel.asm:

 kernel.asmglobal _start[section .data]db 0[section .text]_start:mov ah,00001010bmov al,'y'mov bx,2*8mov gs,bxmov [gs:0],axjmp $ 

   情形2——修改上面的kernel.asm:用[bits 16]修飾.text段。然後先進入到32位的保護模式,再把80000h處的elf檔案LOAD類型的段載入到各自對應位置(由program h
eader中的vaddr指定),jmp到elf入口處,這時指令執行仍會出錯。但去掉[bits 16】,重新編譯就可以執行。

  上面兩個錯誤我現在還不會解釋,將來回頭看。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.