Struct multiboot2_header::Multiboot2Header
source · 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?
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
fn main() {
// We create a Multiboot2 header during runtime here. A practical example is that your
// program gets the header from a file and parses it afterwards.
let mb2_hdr_bytes = HeaderBuilder::new(HeaderTagISA::I386)
.relocatable_tag(RelocatableHeaderTag::new(
HeaderTagFlag::Required,
0x1337,
0xdeadbeef,
4096,
RelocatableHeaderTagPreference::None,
))
.information_request_tag(
InformationRequestHeaderTagBuilder::new(HeaderTagFlag::Required)
.add_irs(&[MbiTagType::Cmdline, MbiTagType::BootLoaderName]),
)
.build();
// Cast bytes in vector to Multiboot2 information structure
let mb2_hdr = unsafe { Multiboot2Header::load(mb2_hdr_bytes.as_ptr().cast()) };
println!("{:#?}", mb2_hdr);
}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 fn iter(&self) -> Multiboot2HeaderTagIter ⓘ
pub fn iter(&self) -> Multiboot2HeaderTagIter ⓘ
Wrapper around Multiboot2BasicHeader::tag_iter.
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 address_tag(&self) -> Option<&AddressHeaderTag>
pub fn address_tag(&self) -> Option<&AddressHeaderTag>
Search for the address header tag.
sourcepub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
pub fn entry_address_tag(&self) -> Option<&EntryAddressHeaderTag>
Search for the entry address header tag.
sourcepub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
pub fn entry_address_efi32_tag(&self) -> Option<&EntryEfi32HeaderTag>
Search for the EFI32 entry address header tag.
sourcepub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
pub fn entry_address_efi64_tag(&self) -> Option<&EntryEfi64HeaderTag>
Search for the EFI64 entry address header tag.
sourcepub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
pub fn console_flags_tag(&self) -> Option<&ConsoleHeaderTag>
Search for the console flags header tag.
sourcepub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
pub fn framebuffer_tag(&self) -> Option<&FramebufferHeaderTag>
Search for the framebuffer header tag.
sourcepub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
pub fn module_align_tag(&self) -> Option<&ModuleAlignHeaderTag>
Search for the module align header tag.
sourcepub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
pub fn efi_boot_services_tag(&self) -> Option<&EfiBootServiceHeaderTag>
Search for the EFI Boot Services header tag.
sourcepub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
pub fn relocatable_tag(&self) -> Option<&RelocatableHeaderTag>
Search for the EFI32 entry address header tag.