pub struct Multiboot2Header<'a>(/* private fields */);Expand description
Wrapper type around a pointer to the Multiboot2 header.
The Multiboot2 header is the Multiboot2BasicHeader followed
by all tags (see crate::tags::HeaderTagType).
Use this if you get a pointer to the header and just want
to parse it. If you want to construct the type by yourself,
please look at HeaderBuilder (requires the builder feature).
Implementations§
Source§impl<'a> Multiboot2Header<'a>
impl<'a> Multiboot2Header<'a>
Sourcepub unsafe fn load(ptr: *const Multiboot2BasicHeader) -> Result<Self, LoadError>
pub unsafe fn load(ptr: *const Multiboot2BasicHeader) -> Result<Self, LoadError>
Public constructor for this type with various validations.
If the header is invalid, it returns a LoadError.
This may be because:
addris a null-pointeraddrisn’t 8-byte aligned- the magic value of the header is not present
- the checksum field is invalid
§Safety
This function may produce undefined behaviour, if the provided addr is not a valid
Multiboot2 header pointer.
Examples found in repository?
9fn main() {
10 // We create a Multiboot2 header during runtime here. A more practical
11 // example, however, would be that you parse the header from kernel binary
12 // at runtime.
13 let mb2_hdr_bytes = Builder::new(HeaderTagISA::I386)
14 .relocatable_tag(RelocatableHeaderTag::new(
15 HeaderTagFlag::Required,
16 0x1337,
17 0xdeadbeef,
18 4096,
19 RelocatableHeaderTagPreference::None,
20 ))
21 .information_request_tag(InformationRequestHeaderTag::new(
22 HeaderTagFlag::Required,
23 &[
24 MbiTagType::Cmdline.into(),
25 MbiTagType::BootLoaderName.into(),
26 ],
27 ))
28 .build();
29
30 // Cast bytes in vector to Multiboot2 information structure
31 let ptr = mb2_hdr_bytes.as_bytes().as_ptr();
32 let mb2_hdr = unsafe { Multiboot2Header::load(ptr.cast()) };
33 let mb2_hdr = mb2_hdr.unwrap();
34 println!("{mb2_hdr:#?}");
35}Sourcepub fn find_header(buffer: &[u8]) -> Result<Option<(&[u8], u32)>, LoadError>
pub fn find_header(buffer: &[u8]) -> Result<Option<(&[u8], u32)>, LoadError>
Find the header in a given slice.
If it succeeds, it returns a tuple consisting of the subslice containing
just the header and the index of the header in the given slice.
If it fails (either because the header is not properly 64-bit aligned
or because it is truncated), it returns a LoadError.
If there is no header, it returns None.
Sourcepub const fn verify_checksum(&self) -> bool
pub const fn verify_checksum(&self) -> bool
Wrapper around Multiboot2BasicHeader::verify_checksum.
Sourcepub const fn header_magic(&self) -> u32
pub const fn header_magic(&self) -> u32
Wrapper around Multiboot2BasicHeader::header_magic.
Sourcepub const fn arch(&self) -> HeaderTagISA
pub const fn arch(&self) -> HeaderTagISA
Wrapper around Multiboot2BasicHeader::arch.
Sourcepub const fn length(&self) -> u32
pub const fn length(&self) -> u32
Wrapper around Multiboot2BasicHeader::length.
Sourcepub const fn checksum(&self) -> u32
pub const fn checksum(&self) -> u32
Wrapper around Multiboot2BasicHeader::checksum.
Sourcepub const fn calc_checksum(magic: u32, arch: HeaderTagISA, length: u32) -> u32
pub const fn calc_checksum(magic: u32, arch: HeaderTagISA, length: u32) -> u32
Wrapper around Multiboot2BasicHeader::calc_checksum.
Sourcepub fn information_request_tag(&self) -> Option<&InformationRequestHeaderTag>
pub fn information_request_tag(&self) -> Option<&InformationRequestHeaderTag>
Search for the InformationRequestHeaderTag header tag.
Sourcepub fn address_tag(&self) -> Option<&AddressHeaderTag>
pub fn address_tag(&self) -> Option<&AddressHeaderTag>
Search for the AddressHeaderTag header tag.
Sourcepub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
pub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
Search for the EntryAddressHeaderTag header tag.
Sourcepub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
pub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
Search for the EntryEfi32HeaderTag header tag.
Sourcepub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
pub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
Search for the EntryEfi64HeaderTag header tag.
Sourcepub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
pub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
Search for the ConsoleHeaderTag header tag.
Sourcepub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
pub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
Search for the FramebufferHeaderTag header tag.
Sourcepub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
pub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
Search for the ModuleAlignHeaderTag header tag.
Sourcepub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
pub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
Search for the EfiBootServiceHeaderTag header tag.
Sourcepub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
pub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
Search for the RelocatableHeaderTag header tag.