|
|
1.1 root 1: #import "mach-o/loader.h"
2: #import <streams/streams.h>
3:
4: #ifndef ENUM_BOOL
5: #define ENUM_BOOL
6: #undef FALSE
7: #undef TRUE
8: enum bool {
9: FALSE,
10: TRUE
11: };
12: #endif /* ENUM_BOOL */
13:
14: /*
15: * The high level NS... API.
16: */
17:
18: /* Object file image api */
19: typedef enum {
20: NSObjectFileImageFailure, /* for this a message is printed on stderr */
21: NSObjectFileImageSuccess,
22: NSObjectFileImageInappropriateFile,
23: NSObjectFileImageArch,
24: NSObjectFileImageFormat, /* for this a message is printed on stderr */
25: NSObjectFileImageAccess,
26: } NSObjectFileImageReturnCode;
27:
28: typedef void * NSObjectFileImage;
29:
30: /* limited implementation, only MH_BUNDLE files can be used */
31: extern NSObjectFileImageReturnCode NSCreateObjectFileImageFromFile(
32: const char *pathName,
33: NSObjectFileImage *objectFileImage);
34: /* not yet implemented */
35: extern NSObjectFileImageReturnCode NSCreateObjectFileImageFromMemory(
36: void *address,
37: unsigned long size,
38: NSObjectFileImage *objectFileImage);
39: /* not yet implemented */
40: extern enum bool NSDestroyObjectFileImage(
41: NSObjectFileImage objectFileImage);
42: /*
43: * Need api on NSObjectFileImage's for:
44: * "for Each Symbol Definition In Object File Image" (for Dynamic Bundles)
45: * Could have the same thing for references
46: */
47: /* not yet implemented */
48: extern unsigned long NSSymbolDefinitionCountInObjectFileImage(
49: NSObjectFileImage objectFileImage);
50: /* not yet implemented */
51: extern const char * NSSymbolDefinitionNameInObjectFileImage(
52: NSObjectFileImage objectFileImage,
53: unsigned long ordinal);
54: /* not yet implemented */
55: extern unsigned long NSSymbolReferenceCountInObjectFileImage(
56: NSObjectFileImage objectFileImage);
57: /* not yet implemented */
58: extern const char * NSSymbolReferenceNameInObjectFileImage(
59: NSObjectFileImage objectFileImage,
60: unsigned long ordinal,
61: enum bool *tentative_definition); /* can be NULL */
62: /*
63: * Other needed api on NSObjectFileImage:
64: * "does Object File Image define symbol name X" (using sorted symbol table)
65: * a way to get the named objective-C section
66: */
67: /* not yet implemented */
68: extern enum bool NSIsSymbolDefinedInObjectFileImage(
69: NSObjectFileImage objectFileImage,
70: const char *symbolName);
71: /* not yet implemented */
72: extern void * NSGetSectionDataInObjectFileImage(
73: NSObjectFileImage objectFileImage,
74: const char *segmentName,
75: const char *sectionName);
76:
77: /* module api */
78: typedef void * NSModule;
79: /* not yet implemented */
80: extern const char * NSNameOfModule(
81: NSModule m);
82: /* not yet implemented */
83: extern const char * NSLibraryNameForModule(
84: NSModule m);
85:
86: /* limited implementation, only MH_BUNDLE files can be linked */
87: extern NSModule NSLinkModule(
88: NSObjectFileImage objectFileImage,
89: const char *moduleName, /* can be NULL */
90: enum bool bindNow);
91: /* not yet implemented */
92: extern enum bool NSUnLinkModule(
93: NSModule module,
94: enum bool keepMemoryMapped);
95: /* not yet implemented */
96: extern NSModule NSReplaceModule(
97: NSModule moduleToReplace,
98: NSObjectFileImage newObjectFileImage,
99: enum bool keepMemoryMapped,
100: enum bool preserveFunctionAddresses);
101:
102: /* symbol api */
103: typedef void * NSSymbol;
104: /* not yet implemented */
105: extern enum bool NSIsSymbolNameDefined(
106: const char *symbolName);
107: /* not yet implemented */
108: extern NSSymbol NSLookupAndBindSymbol(
109: const char *symbolName);
110: /* not yet implemented */
111: extern const char * NSNameOfSymbol(
112: NSSymbol symbol);
113: /* not yet implemented */
114: extern void * NSAddressOfSymbol(
115: NSSymbol symbol);
116: /* not yet implemented */
117: extern NSModule NSModuleForSymbol(
118: NSSymbol symbol);
119:
120: /* error handling api */
121: typedef enum {
122: NSLinkEditFileAccessError,
123: NSLinkEditFileFormatError,
124: NSLinkEditMachResourceError,
125: NSLinkEditUnixResourceError,
126: NSLinkEditOtherError,
127: NSLinkEditWarningError
128: } NSLinkEditErrors;
129:
130: typedef struct {
131: void (*undefined)(const char *symbolName);
132: NSModule (*multiple)(NSSymbol s, NSModule old, NSModule new);
133: void (*linkEdit)(NSLinkEditErrors c, int errorNumber,
134: const char *fileName, const char *errorString);
135: } NSLinkEditErrorHandlers;
136:
137: extern void NSInstallLinkEditErrorHandlers(
138: NSLinkEditErrorHandlers *handlers);
139:
140: /* other api */
141: /* not yet implemented */
142: extern enum bool NSAddLibrary(
143: const char *pathName);
144: /* not yet implemented */
145: extern long NSVersionOfLibrary(
146: const char *libName);
147:
148: /*
149: * The low level _dyld_... API.
150: * (used by the objective-C runtime primarily)
151: */
152: extern unsigned long _dyld_present(
153: void);
154:
155: extern unsigned long _dyld_image_count(
156: void);
157: extern struct mach_header * _dyld_get_image_header(
158: unsigned long image_index);
159: extern unsigned long _dyld_get_image_vmaddr_slide(
160: unsigned long image_index);
161:
162: extern void _dyld_register_func_for_add_image(
163: void (*func)(struct mach_header *mh, unsigned long vmaddr_slide));
164: extern void _dyld_register_func_for_link_module(
165: void (*func)(NSModule module));
166: /* not yet implemented */
167: extern void _dyld_register_func_for_unlink_module(
168: void (*func)(NSModule module));
169: /* not yet implemented */
170: extern void _dyld_register_func_for_replace_module(
171: void (*func)(NSModule oldmodule, NSModule newmodule));
172: extern void _dyld_get_objc_module_sect_for_module(
173: NSModule module,
174: void **objc_module,
175: unsigned long *size);
176: extern void _dyld_bind_objc_module(
177: void *objc_module);
178:
179: extern void _dyld_lookup_and_bind(
180: const char *symbol_name,
181: unsigned long *address,
182: void **module);
183:
184: extern int _dyld_func_lookup(
185: const char *dyld_func_name,
186: unsigned long *address);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.