• 用nasm编译16位的elf文件


      文档里说到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.asm
    global _start
    [section .data]
    db 0
    [section .text]
    _start:
    mov ah,00001010b
    mov al,'y'
    mov bx,2*8
    mov gs,bx
    mov [gs:0],ax
    jmp $
     
    

       情形2——修改上面的kernel.asm:用[bits 16]修饰.text段。然后先进入到32位的保护模式,再把80000h处的elf文件LOAD类型的段加载到各自对应位置(由program h
    eader中的vaddr指定),jmp到elf入口处,这时指令执行仍会出错。但去掉[bits 16】,重新编译就可以执行。

      上面两个错误我现在还不会解释,将来回头看。


  • 相关阅读:
    Linux 安装 MysQl
    Linux上安装pip以及setuptools
    Linux 安装 python3
    基础 项目部署 上线
    wepsocket 了解一下
    scrapy之中间件
    scrapy之定制命令
    网络爬虫之scrapy框架设置代理
    爬虫之Xpath详解
    3.8软件测试模型
  • 原文地址:https://www.cnblogs.com/weiweishuo/p/3082612.html
Copyright © 2020-2023  润新知