From 37a2259f6f96f803554a5bf29e1881b714b6c3e0 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Tue, 13 Jun 2023 20:49:38 +0200 Subject: [PATCH] dwarf --- src/dwarf/divination.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/dwarf/divination.rs b/src/dwarf/divination.rs index b23039b..7e37e12 100644 --- a/src/dwarf/divination.rs +++ b/src/dwarf/divination.rs @@ -37,7 +37,6 @@ pub struct DwarfInfo { /// The `.eh_frame_hdr` section. /// See /// and . -#[repr(C)] struct EhFrameHeader { version: u8, eh_frame_ptr_enc: EhHeaderEncoded, @@ -51,7 +50,7 @@ impl EhFrameHeader { addr_of!((*self).encoded_fields).cast::() } - unsafe fn eh_frame(&self, pc: *const ffi::c_void) -> Option<*const u8> { + unsafe fn eh_frame(&self) -> Option<*const u8> { let ValueFormat::DW_EH_PE_sdata4 = self.eh_frame_ptr_enc.format() else { return None; }; @@ -61,7 +60,11 @@ impl EhFrameHeader { let eh_frame_ptr = unsafe { self.encoded_fields().cast::().read_unaligned() }; - Some(pc.cast::().offset(eh_frame_ptr as isize)) + Some( + self.encoded_fields() + .cast::() + .offset(eh_frame_ptr as isize), + ) } fn fde_count(&self) -> Option { @@ -150,14 +153,14 @@ pub fn dwarf_info(addr: *const ffi::c_void) -> Option { } let header = &*out.dlfo_eh_frame.cast::(); + if header.version != 1 { trace!("eh_frame_hdr version is not 1"); return None; } - trace!("eh_frame_hdr: {:#?}", header); - let Some(ptr) = header.eh_frame(addr) else { + let Some(ptr) = header.eh_frame() else { trace!("could not find .eh_frame"); return None; };