首页 > 其他分享 >0170-Multiboot2 启动头

0170-Multiboot2 启动头

时间:2024-07-13 09:11:43浏览次数:21  
标签:0000 启动 0170 dd Multiboot2 multiboot2 header u32 end

环境

  • Time 2022-11-11
  • WSL-Ubuntu 22.04
  • QEMU 6.2.0
  • NASM 2.15.05

前言

说明

参考:https://os.phil-opp.com/multiboot-kernel/

目标

编写一个符合 multiboot2 规范的启动文件。

multiboot2 规范

https://www.gnu.org/software/grub/manual/multiboot2/multiboot.html#Header-tags
规范定义文档如上,其中的 3.1.1,3.1.2,3.1.3 介绍了启动文件需要符合的格式。

Field Type Value
magic number u32 0xE85250D6
architecture u32 0 for i386, 4 for MIPS
header length u32 total header size, including tags
checksum u32 -(magic + architecture + header_length)
tags variable
end tag (u16, u16, u32) (0, 0, 8)

可以看到上面定义的都是无符号数,其中的 checksum(校验和)+ magic + architecture + header_length 需要等于零。要使无符号数 u32 等于 0,可以使其刚好产生溢出,结果回到 0,即(0x100000000)。

汇编代码

section .multiboot_header
header_start:
    dd 0xe85250d6                ; 魔法数字,固定值
    dd 0                         ; 0 表示进入 32 位保护模式
    dd header_end - header_start ; 头文件的长度
    ; 校验和,因为都是使其加起来一共等于 0
    dd 0x100000000 - (0xe85250d6 + 0 + (header_end - header_start))

    ; 可选的标签

    ; 结束标签
    dw 0    ; type
    dw 0    ; flags
    dd 8    ; size
header_end:

编译和查看机器码

root@jiangbo12490:~/git/game# nasm main.asm
root@jiangbo12490:~/git/game# hexdump -x main
0000000    50d6    e852    0000    0000    0018    0000    af12    17ad
0000010    0000    0000    0008    0000
0000018
root@jiangbo12490:~/git/game#

总结

了解了 multiboot2 的启动规范,定义和实现了其 header 汇编程序。

附录

标签:0000,启动,0170,dd,Multiboot2,multiboot2,header,u32,end
From: https://www.cnblogs.com/jiangbo4444/p/18299659

相关文章

  • 0174-QEMU 从 kernel 启动
    环境Time2022-11-12WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05前言说明参考:https://os.phil-opp.com/multiboot-kernel/参考:https://megtechcorner.medium.com/a-tutorial-on-os-and-compiler-3-5d14f7448415目标使用编写好的内核可执行文件,直接从QEMU启动。kernel......
  • 0175-GDB 调试 multiboot 启动
    环境Time2022-11-12WSL-Ubuntu22.04QEMU6.2.0NASM2.15.05前言说明参考:https://os.phil-opp.com/multiboot-kernel/目标使用编写好的内核可执行文件,直接从QEMU启动,启动时暂停CPU,使用GDB调试。汇编代码section.multiboot_headerheader_start:dd0x1BAD......
  • idea启动vue项目一直卡死在51%,问题分析及其如何解决
    如果你的项目也一直卡在百分之几十,你可以参考下面的方法,试一试能否解决问题描述:通过在idea终端中输入命令npmrunserve启动vue项目,启动进程一直卡在51%如何解决:检查<template>标签中的html内容是否被唯一一个根标签包裹......
  • 【Springboot】玩转复杂单元测试启动类-只测试数据访问层(JPA+Mybatis) 和服务层 以及
    上一篇文章写了一个最复杂的SpringBootTest启动类,定制化程序奇高,然而有时候仅测试JPA是不够的。启动类需求:测试SpringDataJPA测试Mybatis从容器中获得ObjectMapper测试单独的Service使用TestNG或者使用Junit阻止Dubbo、Kafka、ElasticSearch等中间件启动使用appl......
  • Neuralink 将启动第二例人类脑机芯片植入;多项 Claude 3.5 Sonnet AI 工具发布丨RTE 开
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,......
  • 服务器启动没有反应
    当服务器启动没有反应时,可能的原因及解决方法多种多样。一、电源问题检查电源连接:确保电源线已正确插入服务器和电源插座。检查电源插座是否有电,可以尝试将电源线插入其他插座。如果服务器使用UPS(不间断电源),请检查UPS是否正常工作。电源测试:使用多媒体电源测试仪或替换电源......
  • 服务器启动时发出嘀嘀声
    当服务器启动时发出嘀嘀声时,这通常是硬件自检(POST,Power-OnSelf-Test)过程中检测到故障或问题的信号。嘀嘀声的不同模式(如长短、间隔)通常对应着不同的故障类型。一、识别嘀嘀声的模式记录嘀嘀声的模式:注意嘀嘀声的长短和间隔,因为不同的组合可能代表不同的硬件问题。查阅手册:根据......
  • AutoHotKey自动热键(五)添加WINDOWS秘笈指令-输入瞬间启动功能
    在AUTOHOTKEY的使用中,不仅仅可以监听组合热键,还可以监听正常文本击键录入,这是另一种监听方式,比如依次击键jsq之后直接弹出<计算器>工具,或者依次击键sj之后直接输出135****5564的手机号码,等等,这就是autohotkey的录入击键监听,以双冒号为开头::因这种录入监听像极了......
  • “程序无法启动,因为您的计算机中丢失 VCRUNTIME140.dll。”怎么解决
    在计算机中经常会遇到各式各样的问题,其中遇到vcruntime140.dll丢失或许找不到vcruntime140.dll是经常常见的问题之一,那么当我们遇到vcruntime140.dll丢失问题时候要怎么办?下面我就给大家一一讲解vcruntime140.dll文件和vcruntime140.dll文件的多个解决方法!vcruntime140.dll......
  • 《尘埃4》游戏启动难题:msvcp100.dll缺失的全方位修复指南
    当您兴致勃勃地准备在《尘埃4》(DiRT4)中驰骋赛道,却突然遭遇“找不到msvcp100.dll文件”的错误提示时,这无疑是对游戏热情的一种打击。msvcp100.dll是MicrosoftVisualC++2010运行库的一部分,许多现代游戏和应用程序依赖于它才能正常运行。本文将详细介绍几种有效的方法来解决这......