00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef _A_OUT_H_
00012 #define _A_OUT_H_
00013
00014 #ifdef __cplusplus
00015 extern "C" {
00016 #endif
00017 #define COFF_IMAGE_WITH_PE
00018 #define COFF_LONG_SECTION_NAMES
00019
00020
00021
00022
00023
00024
00025 struct external_filehdr {
00026 short f_magic;
00027 short f_nscns;
00028 host_ulong f_timdat;
00029 host_ulong f_symptr;
00030 host_ulong f_nsyms;
00031 short f_opthdr;
00032 short f_flags;
00033 };
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #define F_RELFLG (0x0001)
00044 #define F_EXEC (0x0002)
00045 #define F_LNNO (0x0004)
00046 #define F_LSYMS (0x0008)
00047
00048
00049
00050 #define I386MAGIC 0x14c
00051 #define I386PTXMAGIC 0x154
00052 #define I386AIXMAGIC 0x175
00053
00054
00055
00056 #define LYNXCOFFMAGIC 0415
00057
00058 #define I386BADMAG(x) (((x).f_magic != I386MAGIC) \
00059 && (x).f_magic != I386AIXMAGIC \
00060 && (x).f_magic != I386PTXMAGIC \
00061 && (x).f_magic != LYNXCOFFMAGIC)
00062
00063 #define FILHDR struct external_filehdr
00064 #define FILHSZ 20
00065
00066
00067
00068
00069
00070
00071 typedef struct
00072 {
00073 unsigned short magic;
00074 unsigned short vstamp;
00075 host_ulong tsize;
00076 host_ulong dsize;
00077 host_ulong bsize;
00078 host_ulong entry;
00079 host_ulong text_start;
00080 host_ulong data_start;
00081
00082 }
00083 AOUTHDR;
00084
00085 #define AOUTSZ 28
00086 #define AOUTHDRSZ 28
00087
00088 #define OMAGIC 0404
00089 #define ZMAGIC 0413
00090 #define STMAGIC 0401
00091 #define SHMAGIC 0443
00092
00093
00094
00095
00096 #define NT_SECTION_ALIGNMENT 0x1000
00097 #define NT_FILE_ALIGNMENT 0x200
00098 #define NT_DEF_RESERVE 0x100000
00099 #define NT_DEF_COMMIT 0x1000
00100
00101
00102
00103
00104 struct external_scnhdr {
00105 char s_name[8];
00106 host_ulong s_paddr;
00107
00108 host_ulong s_vaddr;
00109 host_ulong s_size;
00110 host_ulong s_scnptr;
00111 host_ulong s_relptr;
00112 host_ulong s_lnnoptr;
00113 unsigned short s_nreloc;
00114 unsigned short s_nlnno;
00115 host_ulong s_flags;
00116 };
00117
00118 #define SCNHDR struct external_scnhdr
00119 #define SCNHSZ 40
00120
00121
00122
00123
00124 #define _TEXT ".text"
00125 #define _DATA ".data"
00126 #define _BSS ".bss"
00127 #define _COMMENT ".comment"
00128 #define _LIB ".lib"
00129
00130
00131
00132
00133
00134
00135
00136
00137 struct external_lineno {
00138 union {
00139 host_ulong l_symndx;
00140 host_ulong l_paddr;
00141 } l_addr;
00142 unsigned short l_lnno;
00143 };
00144
00145 #define LINENO struct external_lineno
00146 #define LINESZ 6
00147
00148
00149
00150 #define E_SYMNMLEN 8
00151 #define E_FILNMLEN 14
00152 #define E_DIMNUM 4
00153
00154 struct __attribute__((packed)) external_syment
00155 {
00156 union {
00157 char e_name[E_SYMNMLEN];
00158 struct {
00159 host_ulong e_zeroes;
00160 host_ulong e_offset;
00161 } e;
00162 } e;
00163 host_ulong e_value;
00164 unsigned short e_scnum;
00165 unsigned short e_type;
00166 char e_sclass[1];
00167 char e_numaux[1];
00168 };
00169
00170 #define N_BTMASK (0xf)
00171 #define N_TMASK (0x30)
00172 #define N_BTSHFT (4)
00173 #define N_TSHIFT (2)
00174
00175 union external_auxent {
00176 struct {
00177 host_ulong x_tagndx;
00178 union {
00179 struct {
00180 unsigned short x_lnno;
00181 unsigned short x_size;
00182 } x_lnsz;
00183 host_ulong x_fsize;
00184 } x_misc;
00185 union {
00186 struct {
00187 host_ulong x_lnnoptr;
00188 host_ulong x_endndx;
00189 } x_fcn;
00190 struct {
00191 char x_dimen[E_DIMNUM][2];
00192 } x_ary;
00193 } x_fcnary;
00194 unsigned short x_tvndx;
00195 } x_sym;
00196
00197 union {
00198 char x_fname[E_FILNMLEN];
00199 struct {
00200 host_ulong x_zeroes;
00201 host_ulong x_offset;
00202 } x_n;
00203 } x_file;
00204
00205 struct {
00206 host_ulong x_scnlen;
00207 unsigned short x_nreloc;
00208 unsigned short x_nlinno;
00209 host_ulong x_checksum;
00210 unsigned short x_associated;
00211 char x_comdat[1];
00212 } x_scn;
00213
00214 struct {
00215 host_ulong x_tvfill;
00216 unsigned short x_tvlen;
00217 char x_tvran[2][2];
00218 } x_tv;
00219
00220 };
00221
00222 #define SYMENT struct external_syment
00223 #define SYMESZ 18
00224 #define AUXENT union external_auxent
00225 #define AUXESZ 18
00226
00227 #define _ETEXT "etext"
00228
00229
00230
00231 struct external_reloc {
00232 char r_vaddr[4];
00233 char r_symndx[4];
00234 char r_type[2];
00235 };
00236
00237 #define RELOC struct external_reloc
00238 #define RELSZ 10
00239
00240
00241
00242
00243
00244 #ifndef _PE_H
00245 #define _PE_H
00246
00247
00248 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001
00249 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
00250 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
00251 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
00252 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
00253 #define IMAGE_FILE_32BIT_MACHINE 0x0100
00254 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
00255 #define IMAGE_FILE_SYSTEM 0x1000
00256 #define IMAGE_FILE_DLL 0x2000
00257 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
00258
00259
00260
00261
00262
00263 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
00264 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
00265 #define IMAGE_SCN_MEM_READ 0x40000000
00266 #define IMAGE_SCN_MEM_WRITE 0x80000000
00267
00268
00269
00270
00271
00272 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008
00273
00274 #define IMAGE_SCN_CNT_CODE 0x00000020
00275 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
00276 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
00277
00278 #define IMAGE_SCN_LNK_OTHER 0x00000100
00279 #define IMAGE_SCN_LNK_INFO 0x00000200
00280 #define IMAGE_SCN_LNK_REMOVE 0x00000800
00281 #define IMAGE_SCN_LNK_COMDAT 0x00001000
00282
00283 #define IMAGE_SCN_MEM_FARDATA 0x00008000
00284
00285 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
00286 #define IMAGE_SCN_MEM_16BIT 0x00020000
00287 #define IMAGE_SCN_MEM_LOCKED 0x00040000
00288 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
00289
00290 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
00291 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
00292 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
00293 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
00294 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000
00295 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
00296 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
00297
00298
00299 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
00300 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
00301 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
00302 #define IMAGE_SCN_MEM_SHARED 0x10000000
00303
00304
00305
00306 #define IMAGE_COMDAT_SELECT_NODUPLICATES (1)
00307 #define IMAGE_COMDAT_SELECT_ANY (2)
00308 #define IMAGE_COMDAT_SELECT_SAME_SIZE (3)
00309 #define IMAGE_COMDAT_SELECT_EXACT_MATCH (4)
00310 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE (5)
00311
00312
00313 #define DOSMAGIC 0x5a4d
00314 #define NT_SIGNATURE 0x00004550
00315
00316
00317
00318 #undef FILNMLEN
00319 #define FILNMLEN 18
00320
00321
00322 #ifdef COFF_IMAGE_WITH_PE
00323
00324
00325 #undef FILHDR
00326 struct external_PE_filehdr
00327 {
00328
00329 unsigned short e_magic;
00330 unsigned short e_cblp;
00331 unsigned short e_cp;
00332 unsigned short e_crlc;
00333 unsigned short e_cparhdr;
00334 unsigned short e_minalloc;
00335 unsigned short e_maxalloc;
00336 unsigned short e_ss;
00337 unsigned short e_sp;
00338 unsigned short e_csum;
00339 unsigned short e_ip;
00340 unsigned short e_cs;
00341 unsigned short e_lfarlc;
00342 unsigned short e_ovno;
00343 char e_res[4][2];
00344 unsigned short e_oemid;
00345 unsigned short e_oeminfo;
00346 char e_res2[10][2];
00347 host_ulong e_lfanew;
00348 char dos_message[16][4];
00349 unsigned int nt_signature;
00350
00351
00352
00353 unsigned short f_magic;
00354 unsigned short f_nscns;
00355 host_ulong f_timdat;
00356 host_ulong f_symptr;
00357 host_ulong f_nsyms;
00358 unsigned short f_opthdr;
00359 unsigned short f_flags;
00360 };
00361
00362
00363 #define FILHDR struct external_PE_filehdr
00364 #undef FILHSZ
00365 #define FILHSZ 152
00366
00367 #endif
00368
00369 typedef struct
00370 {
00371 unsigned short magic;
00372 unsigned short vstamp;
00373 host_ulong tsize;
00374 host_ulong dsize;
00375 host_ulong bsize;
00376 host_ulong entry;
00377 host_ulong text_start;
00378 host_ulong data_start;
00379
00380
00381 host_ulong ImageBase;
00382 host_ulong SectionAlignment;
00383 host_ulong FileAlignment;
00384 unsigned short MajorOperatingSystemVersion;
00385 unsigned short MinorOperatingSystemVersion;
00386 unsigned short MajorImageVersion;
00387 unsigned short MinorImageVersion;
00388 unsigned short MajorSubsystemVersion;
00389 unsigned short MinorSubsystemVersion;
00390 char Reserved1[4];
00391 host_ulong SizeOfImage;
00392 host_ulong SizeOfHeaders;
00393 host_ulong CheckSum;
00394 unsigned short Subsystem;
00395 unsigned short DllCharacteristics;
00396 host_ulong SizeOfStackReserve;
00397 host_ulong SizeOfStackCommit;
00398 host_ulong SizeOfHeapReserve;
00399 host_ulong SizeOfHeapCommit;
00400 host_ulong LoaderFlags;
00401 host_ulong NumberOfRvaAndSizes;
00402
00403 char DataDirectory[16][2][4];
00404
00405 } PEAOUTHDR;
00406
00407
00408 #undef AOUTSZ
00409 #define AOUTSZ (AOUTHDRSZ + 196)
00410
00411 #undef E_FILNMLEN
00412 #define E_FILNMLEN 18
00413 #endif
00414
00415
00416
00417 #define DT_NON (0)
00418 #define DT_PTR (1)
00419 #define DT_FCN (2)
00420 #define DT_ARY (3)
00421
00422 #define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))
00423 #define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))
00424 #define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))
00425
00426 #ifdef __cplusplus
00427 }
00428 #endif
00429
00430 #endif