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; };