Files
checkm8_tool/c8_remote/lib/payload/payload_entry.c

28 lines
707 B
C

#include "dev_util.h"
extern uint64_t entry_sync(uint64_t *args);
extern uint64_t entry_async(uint64_t *base);
TEXT_SECTION
uint64_t _start(uint64_t arg0, uint64_t arg1, uint64_t arg2, uint64_t arg3,
uint64_t arg4, uint64_t arg5, uint64_t arg6, uint64_t arg7)
{
uint64_t entry, args[8];
__asm__ volatile ("mov %0, x30" : "=r" (entry));
if(entry == 0xbea /* todo: correct entry */)
{
args[0] = arg0;
args[1] = arg1;
args[2] = arg2;
args[3] = arg3;
args[4] = arg4;
args[5] = arg5;
args[6] = arg6;
args[7] = arg7;
return entry_sync(args);
}
else
return entry_async((uint64_t *) arg0);
}