|
|
1.1 root 1: /* ofile.h */
2: #import <ar.h>
3: #import <mach-o/loader.h>
4: #ifdef OFI
5: #import <mach-o/dyld.h>
6: #endif
7: #import "stuff/bytesex.h"
8: #import "stuff/bool.h"
9: #import "stuff/arch.h"
10:
11: enum ofile_type {
12: OFILE_UNKNOWN,
13: OFILE_FAT,
14: OFILE_ARCHIVE,
15: OFILE_Mach_O
16: };
17:
18: /*
19: * The structure used by ofile_*() routines for object files.
20: */
21: struct ofile {
22: char *file_name; /* pointer to name malloc'ed by ofile_map */
23: char *file_addr; /* pointer to vm_allocate'ed memory */
24: unsigned long file_size; /* size of vm_allocate'ed memory */
25: enum ofile_type file_type; /* type of the file */
26:
27: struct fat_header *fat_header; /* If a fat file these are filled in and */
28: struct fat_arch *fat_archs; /* if needed converted to host byte sex */
29:
30: /* If this is a fat file then these are valid and filled in */
31: unsigned long narch; /* the current architecture */
32: enum ofile_type arch_type; /* the type of file for this arch. */
33: struct arch_flag arch_flag; /* the arch_flag for this arch, the name */
34: /* field is pointing at space malloc'ed */
35: /* by ofile_map. */
36:
37: /* If this structure is currently referencing an archive member or an object
38: file that is an archive member these are valid and filled in. */
39: unsigned long member_offset; /* logical offset to the member starting */
40: char *member_addr; /* pointer to the member contents */
41: unsigned long member_size; /* actual size of the member (not rounded)*/
42: struct ar_hdr *member_ar_hdr; /* pointer to the ar_hdr for this member */
43: enum ofile_type member_type; /* the type of file for this member */
44: cpu_type_t archive_cputype; /* if the archive contains objects then */
45: cpu_subtype_t /* these two fields reflect the object */
46: archive_cpusubtype; /* at are in the archive. */
47:
48: /* If this structure is currently referencing an object file these are
49: valid and filled in. The mach_header and load commands have been
50: converted to the host byte sex if needed */
51: char *object_addr; /* the address of the object file */
52: unsigned long object_size; /* the size of the object file */
53: enum byte_sex object_byte_sex; /* the byte sex of the object file */
54: struct mach_header *mh; /* the mach_header of the object file */
55: struct load_command /* the start of the load commands */
56: *load_commands;
57: };
58:
59: extern void ofile_process(
60: char *name,
61: struct arch_flag *arch_flags,
62: unsigned long narch_flags,
63: enum bool all_archs,
64: enum bool process_non_objects,
65: void (*processor)(struct ofile *ofile, char *arch_name, void *cookie),
66: void *cookie);
67: #ifdef OFI
68: extern NSObjectFileImageReturnCode ofile_map(
69: #else
70: extern enum bool ofile_map(
71: #endif
72: const char *file_name,
73: const struct arch_flag *arch_flag, /* can be NULL */
74: const char *object_name, /* can be NULL */
75: struct ofile *ofile,
76: enum bool archives_with_fat_objects);
77: extern void ofile_unmap(
78: struct ofile *ofile);
79: extern enum bool ofile_first_arch(
80: struct ofile *ofile);
81: extern enum bool ofile_next_arch(
82: struct ofile *ofile);
83: enum bool ofile_first_member(
84: struct ofile *ofile);
85: enum bool ofile_next_member(
86: struct ofile *ofile);
87: extern enum bool ofile_specific_member(
88: const char *object_name,
89: struct ofile *ofile);
90: extern void ofile_print(
91: struct ofile *ofile);
92: extern unsigned long size_ar_name(
93: const struct ar_hdr *ar_hdr);
94: extern long ofile_get_word(
95: unsigned long addr,
96: unsigned long *word,
97: void *get_word_data /* struct ofile *ofile */);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.