| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 | #include "pal.h"#include "pal_debug.h"#define SYMBOL_ADDR(sym)                                                    \    ({                                                                      \        void* _sym;                                                         \        __asm__ volatile("movq " #sym "@GOTPCREL(%%rip), %0" : "=r"(_sym)); \        _sym;                                                               \    })#define PRINT_SYMBOL(sym) pal_printf(#sym " = %p\n", SYMBOL_ADDR(sym))int main(int argc, char** argv, char** envp) {    PRINT_SYMBOL(DkVirtualMemoryAlloc);    PRINT_SYMBOL(DkVirtualMemoryFree);    PRINT_SYMBOL(DkVirtualMemoryProtect);    PRINT_SYMBOL(DkProcessCreate);    PRINT_SYMBOL(DkProcessExit);    PRINT_SYMBOL(DkStreamOpen);    PRINT_SYMBOL(DkStreamWaitForClient);    PRINT_SYMBOL(DkStreamRead);    PRINT_SYMBOL(DkStreamWrite);    PRINT_SYMBOL(DkStreamDelete);    PRINT_SYMBOL(DkStreamMap);    PRINT_SYMBOL(DkStreamUnmap);    PRINT_SYMBOL(DkStreamSetLength);    PRINT_SYMBOL(DkStreamFlush);    PRINT_SYMBOL(DkSendHandle);    PRINT_SYMBOL(DkReceiveHandle);    PRINT_SYMBOL(DkStreamAttributesQuery);    PRINT_SYMBOL(DkStreamAttributesQueryByHandle);    PRINT_SYMBOL(DkStreamAttributesSetByHandle);    PRINT_SYMBOL(DkStreamGetName);    PRINT_SYMBOL(DkStreamChangeName);    PRINT_SYMBOL(DkThreadCreate);    PRINT_SYMBOL(DkThreadDelayExecution);    PRINT_SYMBOL(DkThreadYieldExecution);    PRINT_SYMBOL(DkThreadExit);    PRINT_SYMBOL(DkThreadResume);    PRINT_SYMBOL(DkSetExceptionHandler);    PRINT_SYMBOL(DkExceptionReturn);    PRINT_SYMBOL(DkMutexCreate);    PRINT_SYMBOL(DkMutexRelease);    PRINT_SYMBOL(DkNotificationEventCreate);    PRINT_SYMBOL(DkSynchronizationEventCreate);    PRINT_SYMBOL(DkEventSet);    PRINT_SYMBOL(DkEventClear);    PRINT_SYMBOL(DkObjectsWaitAny);    PRINT_SYMBOL(DkObjectClose);    PRINT_SYMBOL(DkSystemTimeQuery);    PRINT_SYMBOL(DkRandomBitsRead);    PRINT_SYMBOL(DkInstructionCacheFlush);    PRINT_SYMBOL(DkSegmentRegister);    PRINT_SYMBOL(DkMemoryAvailableQuota);    PRINT_SYMBOL(DkCreatePhysicalMemoryChannel);    PRINT_SYMBOL(DkPhysicalMemoryCommit);    PRINT_SYMBOL(DkPhysicalMemoryMap);    return 0;}
 |