| /** |
| * 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 |
| ); |