Blame


1 a84cbb2a 2004-04-19 devnull typedef struct Macho Macho;
2 a84cbb2a 2004-04-19 devnull typedef struct MachoCmd MachoCmd;
3 873e5f50 2010-09-24 rsc typedef struct MachoSeg MachoSeg;
4 873e5f50 2010-09-24 rsc typedef struct MachoSect MachoSect;
5 873e5f50 2010-09-24 rsc typedef struct MachoRel MachoRel;
6 873e5f50 2010-09-24 rsc typedef struct MachoSymtab MachoSymtab;
7 873e5f50 2010-09-24 rsc typedef struct MachoSym MachoSym;
8 873e5f50 2010-09-24 rsc typedef struct MachoDysymtab MachoDysymtab;
9 a84cbb2a 2004-04-19 devnull
10 a84cbb2a 2004-04-19 devnull enum
11 a84cbb2a 2004-04-19 devnull {
12 a84cbb2a 2004-04-19 devnull MachoCpuVax = 1,
13 a84cbb2a 2004-04-19 devnull MachoCpu68000 = 6,
14 a84cbb2a 2004-04-19 devnull MachoCpu386 = 7,
15 873e5f50 2010-09-24 rsc MachoCpuAmd64 = 0x1000007,
16 a84cbb2a 2004-04-19 devnull MachoCpuMips = 8,
17 a84cbb2a 2004-04-19 devnull MachoCpu98000 = 10,
18 a84cbb2a 2004-04-19 devnull MachoCpuHppa = 11,
19 a84cbb2a 2004-04-19 devnull MachoCpuArm = 12,
20 a84cbb2a 2004-04-19 devnull MachoCpu88000 = 13,
21 a84cbb2a 2004-04-19 devnull MachoCpuSparc = 14,
22 a84cbb2a 2004-04-19 devnull MachoCpu860 = 15,
23 a84cbb2a 2004-04-19 devnull MachoCpuAlpha = 16,
24 a84cbb2a 2004-04-19 devnull MachoCpuPower = 18,
25 a84cbb2a 2004-04-19 devnull
26 a84cbb2a 2004-04-19 devnull MachoCmdSegment = 1,
27 a84cbb2a 2004-04-19 devnull MachoCmdSymtab = 2,
28 a84cbb2a 2004-04-19 devnull MachoCmdSymseg = 3,
29 a84cbb2a 2004-04-19 devnull MachoCmdThread = 4,
30 873e5f50 2010-09-24 rsc MachoCmdDysymtab = 11,
31 873e5f50 2010-09-24 rsc MachoCmdSegment64 = 25,
32 a84cbb2a 2004-04-19 devnull
33 a84cbb2a 2004-04-19 devnull MachoFileObject = 1,
34 a84cbb2a 2004-04-19 devnull MachoFileExecutable = 2,
35 a84cbb2a 2004-04-19 devnull MachoFileFvmlib = 3,
36 a84cbb2a 2004-04-19 devnull MachoFileCore = 4,
37 cbeb0b26 2006-04-01 devnull MachoFilePreload = 5
38 a84cbb2a 2004-04-19 devnull };
39 a84cbb2a 2004-04-19 devnull
40 873e5f50 2010-09-24 rsc struct MachoSeg
41 873e5f50 2010-09-24 rsc {
42 873e5f50 2010-09-24 rsc char name[16+1];
43 873e5f50 2010-09-24 rsc uint64 vmaddr;
44 873e5f50 2010-09-24 rsc uint64 vmsize;
45 873e5f50 2010-09-24 rsc uint32 fileoff;
46 873e5f50 2010-09-24 rsc uint32 filesz;
47 873e5f50 2010-09-24 rsc uint32 maxprot;
48 873e5f50 2010-09-24 rsc uint32 initprot;
49 873e5f50 2010-09-24 rsc uint32 nsect;
50 873e5f50 2010-09-24 rsc uint32 flags;
51 873e5f50 2010-09-24 rsc MachoSect *sect;
52 873e5f50 2010-09-24 rsc };
53 873e5f50 2010-09-24 rsc
54 873e5f50 2010-09-24 rsc struct MachoSect
55 873e5f50 2010-09-24 rsc {
56 873e5f50 2010-09-24 rsc char name[16+1];
57 873e5f50 2010-09-24 rsc char segname[16+1];
58 873e5f50 2010-09-24 rsc uint64 addr;
59 873e5f50 2010-09-24 rsc uint64 size;
60 873e5f50 2010-09-24 rsc uint32 offset;
61 873e5f50 2010-09-24 rsc uint32 align;
62 873e5f50 2010-09-24 rsc uint32 reloff;
63 873e5f50 2010-09-24 rsc uint32 nreloc;
64 873e5f50 2010-09-24 rsc uint32 flags;
65 fa325e9b 2020-01-10 cross
66 873e5f50 2010-09-24 rsc MachoRel *rel;
67 873e5f50 2010-09-24 rsc };
68 873e5f50 2010-09-24 rsc
69 873e5f50 2010-09-24 rsc struct MachoRel
70 873e5f50 2010-09-24 rsc {
71 873e5f50 2010-09-24 rsc uint32 addr;
72 873e5f50 2010-09-24 rsc uint32 symnum;
73 873e5f50 2010-09-24 rsc uint8 pcrel;
74 873e5f50 2010-09-24 rsc uint8 length;
75 873e5f50 2010-09-24 rsc uint8 extrn;
76 873e5f50 2010-09-24 rsc uint8 type;
77 873e5f50 2010-09-24 rsc };
78 873e5f50 2010-09-24 rsc
79 873e5f50 2010-09-24 rsc struct MachoSymtab
80 873e5f50 2010-09-24 rsc {
81 873e5f50 2010-09-24 rsc uint32 symoff;
82 873e5f50 2010-09-24 rsc uint32 nsym;
83 873e5f50 2010-09-24 rsc uint32 stroff;
84 873e5f50 2010-09-24 rsc uint32 strsize;
85 fa325e9b 2020-01-10 cross
86 873e5f50 2010-09-24 rsc char *str;
87 873e5f50 2010-09-24 rsc MachoSym *sym;
88 873e5f50 2010-09-24 rsc };
89 873e5f50 2010-09-24 rsc
90 873e5f50 2010-09-24 rsc struct MachoSym
91 873e5f50 2010-09-24 rsc {
92 873e5f50 2010-09-24 rsc char *name;
93 873e5f50 2010-09-24 rsc uint8 type;
94 873e5f50 2010-09-24 rsc uint8 sectnum;
95 873e5f50 2010-09-24 rsc uint16 desc;
96 873e5f50 2010-09-24 rsc char kind;
97 873e5f50 2010-09-24 rsc uint64 value;
98 873e5f50 2010-09-24 rsc };
99 873e5f50 2010-09-24 rsc
100 873e5f50 2010-09-24 rsc struct MachoDysymtab
101 873e5f50 2010-09-24 rsc {
102 873e5f50 2010-09-24 rsc uint32 ilocalsym;
103 873e5f50 2010-09-24 rsc uint32 nlocalsym;
104 873e5f50 2010-09-24 rsc uint32 iextdefsym;
105 873e5f50 2010-09-24 rsc uint32 nextdefsym;
106 873e5f50 2010-09-24 rsc uint32 iundefsym;
107 873e5f50 2010-09-24 rsc uint32 nundefsym;
108 873e5f50 2010-09-24 rsc uint32 tocoff;
109 873e5f50 2010-09-24 rsc uint32 ntoc;
110 873e5f50 2010-09-24 rsc uint32 modtaboff;
111 873e5f50 2010-09-24 rsc uint32 nmodtab;
112 873e5f50 2010-09-24 rsc uint32 extrefsymoff;
113 873e5f50 2010-09-24 rsc uint32 nextrefsyms;
114 873e5f50 2010-09-24 rsc uint32 indirectsymoff;
115 873e5f50 2010-09-24 rsc uint32 nindirectsyms;
116 873e5f50 2010-09-24 rsc uint32 extreloff;
117 873e5f50 2010-09-24 rsc uint32 nextrel;
118 873e5f50 2010-09-24 rsc uint32 locreloff;
119 873e5f50 2010-09-24 rsc uint32 nlocrel;
120 873e5f50 2010-09-24 rsc };
121 873e5f50 2010-09-24 rsc
122 a84cbb2a 2004-04-19 devnull struct MachoCmd
123 a84cbb2a 2004-04-19 devnull {
124 a84cbb2a 2004-04-19 devnull int type;
125 873e5f50 2010-09-24 rsc uint32 off;
126 873e5f50 2010-09-24 rsc uint32 size;
127 873e5f50 2010-09-24 rsc MachoSeg seg;
128 873e5f50 2010-09-24 rsc MachoSymtab sym;
129 873e5f50 2010-09-24 rsc MachoDysymtab dsym;
130 a84cbb2a 2004-04-19 devnull };
131 a84cbb2a 2004-04-19 devnull
132 a84cbb2a 2004-04-19 devnull struct Macho
133 a84cbb2a 2004-04-19 devnull {
134 a84cbb2a 2004-04-19 devnull int fd;
135 873e5f50 2010-09-24 rsc int is64;
136 a84cbb2a 2004-04-19 devnull uint cputype;
137 a84cbb2a 2004-04-19 devnull uint subcputype;
138 873e5f50 2010-09-24 rsc uint32 filetype;
139 873e5f50 2010-09-24 rsc uint32 flags;
140 a84cbb2a 2004-04-19 devnull MachoCmd *cmd;
141 a84cbb2a 2004-04-19 devnull uint ncmd;
142 873e5f50 2010-09-24 rsc uint16 (*e2)(uchar*);
143 873e5f50 2010-09-24 rsc uint32 (*e4)(uchar*);
144 873e5f50 2010-09-24 rsc uint64 (*e8)(uchar*);
145 a84cbb2a 2004-04-19 devnull int (*coreregs)(Macho*, uchar**);
146 a84cbb2a 2004-04-19 devnull };
147 a84cbb2a 2004-04-19 devnull
148 a84cbb2a 2004-04-19 devnull Macho *machoopen(char*);
149 a84cbb2a 2004-04-19 devnull Macho *machoinit(int);
150 a84cbb2a 2004-04-19 devnull void machoclose(Macho*);
151 a84cbb2a 2004-04-19 devnull int coreregsmachopower(Macho*, uchar**);
152 873e5f50 2010-09-24 rsc int macholoadrel(Macho*, MachoSect*);
153 873e5f50 2010-09-24 rsc int macholoadsym(Macho*, MachoSymtab*);