Fixed crash

This commit is contained in:
Alex 2022-12-10 09:32:53 +02:00
parent ae1a9cfda6
commit b33646cf11
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD
2 changed files with 21 additions and 16 deletions

View File

@ -1,21 +1,24 @@
extern void (*__preinit_array_start[])(void) __attribute__((weak)); // extern void (*__preinit_array_start[])(void) __attribute__((weak));
extern void (*__preinit_array_end[])(void) __attribute__((weak)); // extern void (*__preinit_array_end[])(void) __attribute__((weak));
extern void (*__init_array_start[])(void) __attribute__((weak)); // extern void (*__init_array_start[])(void) __attribute__((weak));
extern void (*__init_array_end[])(void) __attribute__((weak)); // extern void (*__init_array_end[])(void) __attribute__((weak));
extern void (*__fini_array_start []) (void) __attribute__((weak)); // extern void (*__fini_array_start []) (void) __attribute__((weak));
extern void (*__fini_array_end []) (void) __attribute__((weak)); // extern void (*__fini_array_end []) (void) __attribute__((weak));
extern void _init(void); typedef void (*CallPtr)(void);
extern CallPtr __init_array_start[0], __init_array_end[0];
extern CallPtr __fini_array_start[0], __fini_array_end[0];
// TODO: This is not working properly
void __libc_init_array(void) void __libc_init_array(void)
{ {
unsigned long Count = __preinit_array_end - __preinit_array_start; // for (CallPtr *func = __init_array_start; func != __init_array_end; func++)
for (unsigned long i = 0; i < Count; i++) // (*func)();
__preinit_array_start[i](); }
_init(); void __libc_fini_array(void)
{
Count = __init_array_end - __init_array_start; // for (CallPtr *func = __fini_array_start; func != __fini_array_end; func++)
for (unsigned long i = 0; i < Count; i++) // (*func)();
__init_array_start[i]();
} }

View File

@ -1,5 +1,6 @@
extern void __libc_init_array(void); extern void __libc_init_array(void);
extern void __libc_fini_array(void);
void __libc_init(void) void __libc_init(void)
{ {
@ -8,6 +9,7 @@ void __libc_init(void)
void _exit(int Code) void _exit(int Code)
{ {
__libc_fini_array();
__asm__ __volatile__("syscall" __asm__ __volatile__("syscall"
: :
: "a"(0), "D"(Code) : "a"(0), "D"(Code)