美文网首页
引导程序之起始地址

引导程序之起始地址

作者: louyang | 来源:发表于2020-06-06 00:01 被阅读0次

实模式指的是所有内存地址都是实的,不是虚的。
所有的x86处理器都支持实模式,而且出于兼容性考虑,所有的x86处理器上电后都进入16bit实模式。

据说BIOS会把启动磁盘第一扇区的512字节复制到内存0x7c00处,并跳转到那里接着执行。我们就写一段代码来验证一下:

boot.s

.code16
.global init
init:
  mov $0x07c0, %ax
  mov %ax, %ds
  mov $0x07e0, %ax
  mov %ax, %ss
  mov $0x2000, %sp

  call next
next:
  pop %bx
  sub $(next-init), %bx
  call print_register
  jmp .

print_register:
  mov %bh, %dl
  shr $0x4, %dl
  and $0x0f, %dl
  call print_digit
  mov %bh, %dl
  and $0x0f, %dl
  call print_digit
  mov %bl, %dl
  shr $0x4, %dl
  and $0x0f, %dl
  call print_digit
  mov %bl, %dl
  and $0x0f, %dl
  call print_digit
  ret

print_digit: # %dl has digit to be printed
  cmp $0x9, %dl
  jg print_digit_atof
print_digit_1to9:
  add $0x30, %dl
  jmp print_digit_out
print_digit_atof:
  add $0x57, %dl
print_digit_out:
  mov %dl, %al
  mov $0x0e, %ah
  int $0x10
  ret

.=510
.byte 0x55
.byte 0xaa
$ as -o boot.o boot.s
$ ld -o boot.bin --oformat binary -e init boot.o 
image.png
参考

https://www.jianshu.com/writer#/notebooks/19149135/notes/71268850

相关文章

  • 引导程序之起始地址

    实模式指的是所有内存地址都是实的,不是虚的。所有的x86处理器都支持实模式,而且出于兼容性考虑,所有的x86处理器...

  • IAP跳转APP段代码理解

    IAP起始地址:iapaddr APP起始地址:appaddr 中断向量表的起始地址:IAP:iapaddr+4(...

  • linux pxe的构建

    服务端要求: (dhcp已经配好) 运行dhcp服务,用来分配地址,定位引导程序 运行tftp服务,提供引导程序下...

  • ld链接器添加的符号

    链接器在链接时会在程序中插入一些特殊的符号 __executable_start 程序起始地址__etext 代...

  • 一步一步学pwn之防御机制

    ASLR(内存地址随机化)---系统层操作系统可以将函数调用栈和libc的起始地址设为随机地址,这样程序每次运行地...

  • 堆、栈与大小端存储

    堆、栈与大小端存储 前言 首先先提一个和操作系统主引导相关的概念:一个有效的主引导扇区,其起始地址为0X7c00,...

  • 1.C++程序设计——函数指针

    基本概念 程序运行期间,每个函数都会占用一段连续的内存空间 函数名就是该函数所占内存区域的起始地址(入口地址) 可...

  • keil 在自定义程序起始地址开始调试

    keil option 中DEBUG页面下initialization file 加入脚本文件Debug_Ram...

  • 分散加载文件格式以及debug中无法打断点的原因

    1、对于LPC3250 .sct 在片内的ram中执行程序,设置的地址起始位,要加入中断向量 LOAD_ROM ...

  • MBR GPT

    1.MBR 1.1 MBR的组成 一个扇区的硬盘主引导记录MBR由4个部分组成。 主引导程序(偏移地址0000H-...

网友评论

      本文标题:引导程序之起始地址

      本文链接:https://www.haomeiwen.com/subject/cevzzhtx.html