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