| /** | |
| * D header file for $(LINK2 https://opensource.apple.com/source/cctools/cctools-895/include/mach-o/getsect.h.auto.html, mach-o/getsect.h). | |
| * | |
| * Copyright: Copyright Digital Mars 2010-2018. | |
| * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0). | |
| * Authors: Jacob Carlborg | |
| * Version: Initial created: Mar 16, 2010 | |
| * Source: $(DRUNTIMESRC core/sys/darwin/mach/_getsect.d) | |
| */ | |
| module core.sys.darwin.mach.getsect; | |
| extern (C): | |
| nothrow: | |
| @nogc: | |
| version (CoreDdoc) | |
| { | |
| import core.stdc.config : c_ulong; | |
| /** | |
| * In reality this will be $(REF mach_header, core, sys, darwin, mach, loader) | |
| * on 32-bit platforms and $(REF mach_header_64, core, sys, darwin, mach, loader) | |
| * 64-bit platforms. | |
| */ | |
| struct MachHeader; | |
| /** | |
| * In reality this will be $(REF segment_command, core, sys, darwin, mach, loader) | |
| * on 32-bit platforms and $(REF segment_command_64, core, sys, darwin, mach, loader) | |
| * 64-bit platforms. | |
| */ | |
| struct SegmentCommand; | |
| /** | |
| * In reality this will be $(REF section, core, sys, darwin, mach, loader) | |
| * on 32-bit platforms and $(REF section_64, core, sys, darwin, mach, loader) | |
| * 64-bit platforms. | |
| */ | |
| struct Section; | |
| /** | |
| * Returns the section data of section with the given section name. | |
| * | |
| * Returns the section data of the given section in the given segment in the | |
| * mach executable it is linked into. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * int size; | |
| * assert(getsectdata("__TEXT", "__text", &size)); | |
| * assert(size > 0); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * size = this will be set to the size of the section or 0 if the section | |
| * doesn't exist | |
| * | |
| * Returns: a pointer to the section data or `null` if it doesn't exist | |
| */ | |
| char* getsectdata( | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong *size | |
| ); | |
| /** | |
| * Returns the section data of section with the given section name. | |
| * | |
| * Returns the section data of the given section in the given segment in the | |
| * given framework. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * int size; | |
| * assert(getsectdatafromFramework("Foundation", "__TEXT", "__text", &size)); | |
| * assert(size > 0); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * FrameworkName = the name of the framework to get the section data from | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * size = this will be set to the size of the section or 0 if the section | |
| * doesn't exist | |
| * | |
| * Returns: a pointer to the section data or `null` if it doesn't exist | |
| */ | |
| char* getsectdatafromFramework( | |
| const scope char* FrameworkName, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| /// | |
| c_ulong get_end(); | |
| /// | |
| c_ulong get_etext(); | |
| /// | |
| c_ulong get_edata(); | |
| /** | |
| * Returns the section with the given section name. | |
| * | |
| * Returns the section structure of the given section in the given segment | |
| * in the mach executable it is linked into. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * assert(getsectbyname("__TEXT", "__text")); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * | |
| * Returns: a pointer to the section structure or `null` if it doesn't exist | |
| */ | |
| const(Section)* getsectbyname( | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| /** | |
| * Returns the section data of section with the given section name. | |
| * | |
| * Returns the section data of the given section in the given segment in the | |
| * image pointed to by the given mach header. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * import core.sys.darwin.crt_externs; | |
| * | |
| * auto mph = _NSGetMachExecuteHeader(); | |
| * int size; | |
| * assert(getsectiondata(mph, "__TEXT", "__text", &size)); | |
| * assert(size > 0); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * mhp = the mach header to get the section data from | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * size = this will be set to the size of the section or 0 if the section | |
| * doesn't exist | |
| * | |
| * Returns: a pointer to the section data or `null` if it doesn't exist | |
| */ | |
| ubyte* getsectiondata( | |
| const scope MachHeader* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| /** | |
| * Returns the segment with the given segment name. | |
| * | |
| * Returns the segment structure of the given segment in the mach executable | |
| * it is linked into. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * assert(getsegbyname("__TEXT")); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * segname = the name of the segment | |
| * | |
| * Returns: a pointer to the section structure or `null` if it doesn't exist | |
| */ | |
| const(SegmentCommand)* getsegbyname( | |
| const scope char* segname | |
| ); | |
| /** | |
| * Returns the segment data of segment with the given segment name. | |
| * | |
| * Returns the segment data of the given segment in the image pointed to by | |
| * the given mach header. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * import core.sys.darwin.crt_externs; | |
| * | |
| * auto mph = _NSGetMachExecuteHeader(); | |
| * int size; | |
| * assert(getsegmentdata(mph, "__TEXT", &size)); | |
| * assert(size > 0); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * mhp = the mach header to get the section data from | |
| * segname = the name of the segment | |
| * size = this will be set to the size of the section or 0 if the section | |
| * doesn't exist | |
| * | |
| * Returns: a pointer to the section data or `null` if it doesn't exist | |
| */ | |
| ubyte* getsegmentdata( | |
| const scope MachHeader* mhp, | |
| const scope char* segname, | |
| c_ulong* size | |
| ); | |
| struct mach_header; | |
| struct mach_header_64; | |
| struct section; | |
| struct section_64; | |
| /** | |
| * Returns the section data of section with the given section name. | |
| * | |
| * Returns the section data of the given section in the given segment in the | |
| * image pointed to by the given mach header. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * import core.sys.darwin.crt_externs; | |
| * | |
| * auto mph = _NSGetMachExecuteHeader(); | |
| * int size; | |
| * assert(getsectdatafromheader(mph, "__TEXT", "__text", &size)); | |
| * assert(size > 0); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * mhp = the mach header to get the section data from | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * size = this will be set to the size of the section or 0 if the section | |
| * doesn't exist | |
| * | |
| * Returns: a pointer to the section data or `null` if it doesn't exist | |
| */ | |
| ubyte* getsectdatafromheader( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| /// ditto | |
| ubyte* getsectdatafromheader_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| /** | |
| * Returns the section with the given section name. | |
| * | |
| * Returns the section structure of the given section in the given segment | |
| * in image pointed to by the given mach header. | |
| * | |
| * --- | |
| * void main() | |
| * { | |
| * import core.sys.darwin.mach.getsect; | |
| * import core.sys.darwin.crt_externs; | |
| * | |
| * auto mph = _NSGetMachExecuteHeader(); | |
| * assert(getsectbynamefromheader(mph, "__TEXT", "__text")); | |
| * } | |
| * --- | |
| * | |
| * Params: | |
| * mhp = the mach header to get the section from | |
| * segname = the name of the segment | |
| * sectname = the name of the section | |
| * | |
| * Returns: a pointer to the section structure or `null` if it doesn't exist | |
| */ | |
| const(section)* getsectbynamefromheader( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| /// ditto | |
| const(section_64)* getsectbynamefromheader_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| /** | |
| * Returns the section with the given section name. | |
| * | |
| * Returns the section structure of the given section in the given segment | |
| * in image pointed to by the given mach header. | |
| * | |
| * Params: | |
| * mhp = the mach header to get the section from | |
| * segname = the name of the segment | |
| * section = the name of the section | |
| * fSwap = ? | |
| * | |
| * Returns: a pointer to the section structure or `null` if it doesn't exist | |
| */ | |
| const(section)* getsectbynamefromheaderwithswap( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* section, | |
| int fSwap | |
| ); | |
| /// ditto | |
| const(section)* getsectbynamefromheaderwithswap_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* section, | |
| int fSwap | |
| ); | |
| } | |
| else version (OSX) | |
| version = Darwin; | |
| else version (iOS) | |
| version = Darwin; | |
| else version (TVOS) | |
| version = Darwin; | |
| else version (WatchOS) | |
| version = Darwin; | |
| version (Darwin): | |
| public import core.sys.darwin.mach.loader; | |
| import core.stdc.config : c_ulong; | |
| char* getsectdata( | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong *size | |
| ); | |
| char* getsectdatafromFramework( | |
| const scope char* FrameworkName, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| c_ulong get_end(); | |
| c_ulong get_etext(); | |
| c_ulong get_edata(); | |
| // Runtime interfaces for 64-bit Mach-O programs. | |
| version (D_LP64) | |
| { | |
| const(section_64)* getsectbyname( | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| ubyte* getsectiondata( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| const(segment_command_64)* getsegbyname( | |
| const scope char* segname | |
| ); | |
| ubyte* getsegmentdata( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| c_ulong* size | |
| ); | |
| } | |
| // Runtime interfaces for 32-bit Mach-O programs. | |
| else | |
| { | |
| const(section)* getsectbyname( | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| ubyte* getsectiondata( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| const(segment_command)* getsegbyname( | |
| const scope char* segname | |
| ); | |
| ubyte* getsegmentdata( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| c_ulong* size | |
| ); | |
| } | |
| // Interfaces for tools working with 32-bit Mach-O files. | |
| ubyte* getsectdatafromheader( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| const(section)* getsectbynamefromheader( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| const(section)* getsectbynamefromheaderwithswap( | |
| const scope mach_header* mhp, | |
| const scope char* segname, | |
| const scope char* section, | |
| int fSwap | |
| ); | |
| // Interfaces for tools working with 64-bit Mach-O files. | |
| ubyte* getsectdatafromheader_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* sectname, | |
| c_ulong* size | |
| ); | |
| const(section_64)* getsectbynamefromheader_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* sectname | |
| ); | |
| const(section)* getsectbynamefromheaderwithswap_64( | |
| const scope mach_header_64* mhp, | |
| const scope char* segname, | |
| const scope char* section, | |
| int fSwap | |
| ); |