From 234f06285076f6a57bfa7f9c1edb40be25dbe681 Mon Sep 17 00:00:00 2001 From: midipix Date: Thu, 19 Oct 2017 03:28:13 +0000 Subject: _start(): implemented __libc_loader_init() for the ldso and vrfs flavors. --- arch/nt32/peldso.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ arch/nt64/peldso.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 arch/nt32/peldso.h create mode 100644 arch/nt64/peldso.h (limited to 'arch') diff --git a/arch/nt32/peldso.h b/arch/nt32/peldso.h new file mode 100644 index 0000000..bbe3e22 --- /dev/null +++ b/arch/nt32/peldso.h @@ -0,0 +1,52 @@ +#ifndef _PELDSO_H_ +#define _PELDSO_H_ + +/* ldso flags (pemagine)*/ +#define PE_LDSO_INTEGRAL_ONLY 0x00000000 +#define PE_LDSO_DEFAULT_EXECUTABLE 0x00000001 +#define PE_LDSO_STANDALONE_EXECUTABLE 0x00000002 + +/* error status (ntapi) */ +#define NT_STATUS_NOINTERFACE 0xC00002B9 + +/* rtdata guid (ntapi) */ +#define NT_PROCESS_GUID_RTDATA {0x3e43ec84,0x1af1,0x4ede,{0xac,0xd8,0xc3,0xd9,0x20,0xaf,0xc8,0x68}} + +/* abi guid */ +struct __guid { + unsigned int data1; + unsigned short data2; + unsigned short data3; + unsigned char data4[8]; +}; + +/* loader interfaces, statically linked (libldso.a) */ +__attribute__((__visibility__("hidden"))) int __ldso_terminate_current_process( + int estatus); + +__attribute__((__visibility__("hidden"))) void * __ldso_get_procedure_address( + const void * base, + const char * name); + +__attribute__((__visibility__("hidden"))) int __ldso_load_framework_loader_ex( + void ** baseaddr, + void ** hroot, + void ** hdsodir, + const struct __guid * abi, + const unsigned short * basename, + const unsigned short * rrelname, + void * refaddr, + unsigned long * buffer, + unsigned int bufsize, + unsigned int flags, + unsigned int * sysflags); + +__attribute__((__visibility__("hidden"))) int __ldso_load_framework_library( + void ** baseaddr, + void * hat, + const unsigned short * atrelname, + unsigned long * buffer, + unsigned int bufsize, + unsigned int * sysflags); + +#endif diff --git a/arch/nt64/peldso.h b/arch/nt64/peldso.h new file mode 100644 index 0000000..bbe3e22 --- /dev/null +++ b/arch/nt64/peldso.h @@ -0,0 +1,52 @@ +#ifndef _PELDSO_H_ +#define _PELDSO_H_ + +/* ldso flags (pemagine)*/ +#define PE_LDSO_INTEGRAL_ONLY 0x00000000 +#define PE_LDSO_DEFAULT_EXECUTABLE 0x00000001 +#define PE_LDSO_STANDALONE_EXECUTABLE 0x00000002 + +/* error status (ntapi) */ +#define NT_STATUS_NOINTERFACE 0xC00002B9 + +/* rtdata guid (ntapi) */ +#define NT_PROCESS_GUID_RTDATA {0x3e43ec84,0x1af1,0x4ede,{0xac,0xd8,0xc3,0xd9,0x20,0xaf,0xc8,0x68}} + +/* abi guid */ +struct __guid { + unsigned int data1; + unsigned short data2; + unsigned short data3; + unsigned char data4[8]; +}; + +/* loader interfaces, statically linked (libldso.a) */ +__attribute__((__visibility__("hidden"))) int __ldso_terminate_current_process( + int estatus); + +__attribute__((__visibility__("hidden"))) void * __ldso_get_procedure_address( + const void * base, + const char * name); + +__attribute__((__visibility__("hidden"))) int __ldso_load_framework_loader_ex( + void ** baseaddr, + void ** hroot, + void ** hdsodir, + const struct __guid * abi, + const unsigned short * basename, + const unsigned short * rrelname, + void * refaddr, + unsigned long * buffer, + unsigned int bufsize, + unsigned int flags, + unsigned int * sysflags); + +__attribute__((__visibility__("hidden"))) int __ldso_load_framework_library( + void ** baseaddr, + void * hat, + const unsigned short * atrelname, + unsigned long * buffer, + unsigned int bufsize, + unsigned int * sysflags); + +#endif -- cgit v1.2.3