From 9f37d99fbde4deb71314351c0a195d36ae3f888f Mon Sep 17 00:00:00 2001 From: Luke Street Date: Thu, 25 Sep 2025 00:50:35 -0600 Subject: [PATCH] [WIP] OMF object support --- Cargo.lock | 3 +-- objdiff-core/Cargo.toml | 2 +- objdiff-core/src/arch/ppc/mod.rs | 1 + objdiff-core/src/arch/x86.rs | 2 ++ objdiff-core/src/obj/mod.rs | 1 + objdiff-core/src/obj/read.rs | 1 + 6 files changed, 7 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9e452a5..ba113b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3624,8 +3624,7 @@ dependencies = [ [[package]] name = "object" version = "0.37.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +source = "git+https://github.com/encounter/object?branch=omf#f8023933c931335a1ea55384bfef538457c412a5" dependencies = [ "memchr", ] diff --git a/objdiff-core/Cargo.toml b/objdiff-core/Cargo.toml index eb91ad8..6e986a1 100644 --- a/objdiff-core/Cargo.toml +++ b/objdiff-core/Cargo.toml @@ -132,7 +132,7 @@ itertools = { version = "0.14", default-features = false, features = ["use_alloc log = { version = "0.4", default-features = false, optional = true } memmap2 = { version = "0.9", optional = true } num-traits = { version = "0.2", default-features = false, optional = true } -object = { version = "0.37", default-features = false, features = ["read_core", "elf", "coff"] } +object = { git = "https://github.com/encounter/object", branch = "omf", default-features = false, features = ["read_core", "elf", "coff", "omf"] } pbjson = { version = "0.8", default-features = false, optional = true } prost = { version = "0.14", default-features = false, features = ["derive"], optional = true } regex = { version = "1.11", default-features = false, features = [], optional = true } diff --git a/objdiff-core/src/arch/ppc/mod.rs b/objdiff-core/src/arch/ppc/mod.rs index 24f01eb..08524ce 100644 --- a/objdiff-core/src/arch/ppc/mod.rs +++ b/objdiff-core/src/arch/ppc/mod.rs @@ -332,6 +332,7 @@ impl Arch for ArchPpc { pe::IMAGE_REL_PPC_PAIR => Some("IMAGE_REL_PPC_PAIR"), _ => None, }, + _ => None, } } diff --git a/objdiff-core/src/arch/x86.rs b/objdiff-core/src/arch/x86.rs index 0e4bee1..79c8f20 100644 --- a/objdiff-core/src/arch/x86.rs +++ b/objdiff-core/src/arch/x86.rs @@ -72,6 +72,7 @@ impl ArchX86 { elf::R_386_16 => Some(2), _ => None, }, + RelocationFlags::Omf() => Some(4), // TODO }, Architecture::X86_64 => match flags { RelocationFlags::Coff(typ) => match typ { @@ -84,6 +85,7 @@ impl ArchX86 { elf::R_X86_64_64 => Some(8), _ => None, }, + RelocationFlags::Omf() => None, // TODO }, } } diff --git a/objdiff-core/src/obj/mod.rs b/objdiff-core/src/obj/mod.rs index 8a58319..e77708a 100644 --- a/objdiff-core/src/obj/mod.rs +++ b/objdiff-core/src/obj/mod.rs @@ -370,6 +370,7 @@ pub struct Relocation { pub enum RelocationFlags { Elf(u32), Coff(u16), + Omf(/* TODO */), } #[derive(Debug, Copy, Clone)] diff --git a/objdiff-core/src/obj/read.rs b/objdiff-core/src/obj/read.rs index 2dea685..8356808 100644 --- a/objdiff-core/src/obj/read.rs +++ b/objdiff-core/src/obj/read.rs @@ -510,6 +510,7 @@ fn map_section_relocations( let flags = match reloc.flags() { object::RelocationFlags::Elf { r_type } => RelocationFlags::Elf(r_type), object::RelocationFlags::Coff { typ } => RelocationFlags::Coff(typ), + object::RelocationFlags::Omf { .. } => RelocationFlags::Omf(/* TODO */), flags => bail!("Unhandled relocation flags: {:?}", flags), }; let target_symbol = match symbol_indices.get(symbol_index.0).copied() {