1use crate::ffi::{
4 c_char,
5 cpu_type_t,
6 cpu_subtype_t,
7};
8
9#[repr(C)]
10#[allow(dead_code, non_snake_case)]
11#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
12pub struct mach_header {
13 pub magic: u32,
14 pub cputype: cpu_type_t,
15 pub cpusubtype: cpu_subtype_t,
16 pub filetype: u32,
17 pub ncmds: u32,
18 pub sizeofcmds: u32,
19 pub flags: u32,
20}
21
22pub const LC_SEGMENT: u32 = 1;
23pub const LC_SEGMENT_64: u32 = 25;
24pub const LC_SYMTAB: u32 = 2;
25pub const INDIRECT_SYMBOL_LOCAL: u32 = 2147483648;
26pub const INDIRECT_SYMBOL_ABS: u32 = 1073741824;
27pub const SECTION_TYPE: u32 = 255;
28pub const S_LAZY_SYMBOL_POINTERS: u32 = 7;
29pub const S_NON_LAZY_SYMBOL_POINTERS: u32 = 6;
30
31pub const SEG_TEXT: &[u8; 7] = b"__TEXT\0";
32pub const SEG_DATA: &[u8; 7] = b"__DATA\0";
33pub const SEG_LINKEDIT: &[u8; 11] = b"__LINKEDIT\0";
34pub const SEG_DATA_CONST: &[u8; 13] = b"__DATA_CONST\0";
35
36#[repr(C)]
37#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
38pub struct load_command {
39 pub cmd: u32,
40 pub cmdsize: u32,
41}
42
43#[repr(C)]
44#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
45pub struct symtab_command {
46 pub cmd: u32,
47 pub cmdsize: u32,
48 pub symoff: u32,
49 pub nsyms: u32,
50 pub stroff: u32,
51 pub strsize: u32,
52}
53
54#[repr(C)]
55#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
56pub struct dysymtab_command {
57 pub cmd: u32,
58 pub cmdsize: u32,
59 pub ilocalsym: u32,
60 pub nlocalsym: u32,
61 pub iextdefsym: u32,
62 pub nextdefsym: u32,
63 pub iundefsym: u32,
64 pub nundefsym: u32,
65 pub tocoff: u32,
66 pub ntoc: u32,
67 pub modtaboff: u32,
68 pub nmodtab: u32,
69 pub extrefsymoff: u32,
70 pub nextrefsyms: u32,
71 pub indirectsymoff: u32,
72 pub nindirectsyms: u32,
73 pub extreloff: u32,
74 pub nextrel: u32,
75 pub locreloff: u32,
76 pub nlocrel: u32,
77}
78
79#[repr(C)]
80#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
81pub struct section_64 {
82 pub sectname: [c_char; 16],
83 pub segname: [c_char; 16],
84 pub addr: u64,
85 pub size: u64,
86 pub offset: u32,
87 pub align: u32,
88 pub reloff: u32,
89 pub nreloc: u32,
90 pub flags: u32,
91 pub reserved1: u32,
92 pub reserved2: u32,
93 pub reserved3: u32,
94}
95