readobj: print mach-o integer fields as version strings as appropriate (#813)

This commit is contained in:
Jez Ng
2025-10-24 22:45:41 -04:00
committed by GitHub
parent 6998ba9763
commit 4001fd5552
9 changed files with 39 additions and 26 deletions
+19 -6
View File
@@ -3,6 +3,19 @@ use object::macho::*;
use object::read::macho::*;
use object::BigEndian;
trait PrinterMachoExt {
fn field_version(&mut self, name: &str, value: u32);
}
impl<'a> PrinterMachoExt for Printer<'a> {
fn field_version(&mut self, name: &str, value: u32) {
let major = (value >> 16) & 0xFFFF;
let minor = (value >> 8) & 0xFF;
let update = value & 0xFF;
self.field(name, format!("{}.{}.{}", major, minor, update));
}
}
pub(super) fn print_dyld_cache(p: &mut Printer<'_>, data: &[u8], subcache_data: &[&[u8]]) {
print_dyld_subcache(p, data);
for subcache in subcache_data {
@@ -417,8 +430,8 @@ fn print_load_command<Mach: MachHeader>(
command.string(endian, x.dylib.name),
);
p.field("Timestamp", x.dylib.timestamp.get(endian));
p.field_hex("CurrentVersion", x.dylib.current_version.get(endian));
p.field_hex(
p.field_version("CurrentVersion", x.dylib.current_version.get(endian));
p.field_version(
"CompatibilityVersion",
x.dylib.compatibility_version.get(endian),
);
@@ -606,8 +619,8 @@ fn print_load_command<Mach: MachHeader>(
p.group("VersionMinCommand", |p| {
p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
p.field_hex("CmdSize", x.cmdsize.get(endian));
p.field_hex("Version", x.version.get(endian));
p.field_hex("Sdk", x.sdk.get(endian));
p.field_version("Version", x.version.get(endian));
p.field_version("Sdk", x.sdk.get(endian));
});
}
LoadCommandVariant::EntryPoint(x) => {
@@ -648,8 +661,8 @@ fn print_load_command<Mach: MachHeader>(
p.field_enum("Cmd", x.cmd.get(endian), FLAGS_LC);
p.field_hex("CmdSize", x.cmdsize.get(endian));
p.field_enum("Platform", x.platform.get(endian), FLAGS_PLATFORM);
p.field_hex("MinOs", x.minos.get(endian));
p.field_hex("Sdk", x.sdk.get(endian));
p.field_version("MinOs", x.minos.get(endian));
p.field_version("Sdk", x.sdk.get(endian));
p.field_hex("NumberOfTools", x.ntools.get(endian));
// TODO: dump tools
});
@@ -241,8 +241,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xD0000
Sdk: 0xD0300
MinOs: 13.0.0
Sdk: 13.3.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -105,8 +105,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xD0000
Sdk: 0xD0300
MinOs: 13.0.0
Sdk: 13.3.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -105,8 +105,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xD0000
Sdk: 0xD0300
MinOs: 13.0.0
Sdk: 13.3.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -227,8 +227,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x20
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xD0000
Sdk: 0xD0300
MinOs: 13.0.0
Sdk: 13.3.0
NumberOfTools: 0x1
}
SourceVersionCommand {
@@ -248,8 +248,8 @@ DylibCommand {
Dylib {
Name: "/usr/lib/libSystem.B.dylib" (0x18)
Timestamp: 2
CurrentVersion: 0x5276403
CompatibilityVersion: 0x10000
CurrentVersion: 1319.100.3
CompatibilityVersion: 1.0.0
}
}
LinkeditDataCommand {
@@ -249,8 +249,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xC0000
Sdk: 0xD0100
MinOs: 12.0.0
Sdk: 13.1.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -113,8 +113,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xC0000
Sdk: 0xD0100
MinOs: 12.0.0
Sdk: 13.1.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -113,8 +113,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x18
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xC0000
Sdk: 0xD0100
MinOs: 12.0.0
Sdk: 13.1.0
NumberOfTools: 0x0
}
SymtabCommand {
@@ -305,8 +305,8 @@ BuildVersionCommand {
Cmd: LC_BUILD_VERSION (0x32)
CmdSize: 0x20
Platform: PLATFORM_MACOS (0x1)
MinOs: 0xC0000
Sdk: 0xD0100
MinOs: 12.0.0
Sdk: 13.1.0
NumberOfTools: 0x1
}
SourceVersionCommand {
@@ -326,8 +326,8 @@ DylibCommand {
Dylib {
Name: "/usr/lib/libSystem.B.dylib" (0x18)
Timestamp: 2
CurrentVersion: 0x5270000
CompatibilityVersion: 0x10000
CurrentVersion: 1319.0.0
CompatibilityVersion: 1.0.0
}
}
LinkeditDataCommand {