#ifndef __OS_H_ #define __OS_H_ #include #include #ifndef _WIN32 #include #include #else typedef __int64 ssize_t; #define dlsym(a, b) NULL #define PROT_READ 0x1 #define PROT_WRITE 0x2 #define PROT_EXEC 0x4 #define MAP_FAILED ((void*)-1) #define MAP_PRIVATE 0x02 #define MAP_FIXED 0x10 #define MAP_ANONYMOUS 0x20 #define MAP_32BIT 0x40 #define MAP_NORESERVE 0 void* mmap(void* addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void* addr, size_t length); int mprotect(void* addr, size_t len, int prot); void* WinMalloc(size_t size); void* WinRealloc(void* ptr, size_t size); void* WinCalloc(size_t nmemb, size_t size); void WinFree(void* ptr); #endif void* InternalMmap(void* addr, unsigned long length, int prot, int flags, int fd, ssize_t offset); int InternalMunmap(void* addr, unsigned long length); int GetTID(void); int SchedYield(void); void EmuX64Syscall(void* emu); void EmuX86Syscall(void* emu); void* GetSeg43Base(); void* GetSegmentBase(uint32_t desc); // These functions only applies to Linux -------------------------- int IsBridgeSignature(char s, char c); int IsNativeCall(uintptr_t addr, int is32bits, uintptr_t* calladdress, uint16_t* retn); void EmuInt3(void* emu, void* addr); void* EmuFork(void* emu, int forktype); void PersonalityAddrLimit32Bit(void); int IsAddrElfOrFileMapped(uintptr_t addr); const char* GetNativeName(void* p); // ---------------------------------------------------------------- #ifndef _WIN32 #include #define LongJmp longjmp #define SigSetJmp sigsetjmp #else #define LongJmp(a, b) #define SigSetJmp(a, b) 0 #endif #ifndef _WIN32 #include #define NEW_JUMPBUFF(name) \ static __thread JUMPBUFF name #ifdef ANDROID #define JUMPBUFF sigjmp_buf #define GET_JUMPBUFF(name) name #else #define JUMPBUFF struct __jmp_buf_tag #define GET_JUMPBUFF(name) &name #endif #else #define JUMPBUFF int #define NEW_JUMPBUFF(name) #define GET_JUMPBUFF(name) NULL #endif #define PROT_READ 0x1 #define PROT_WRITE 0x2 #define PROT_EXEC 0x4 #if defined(__clang__) && !defined(_WIN32) extern int isinff(float); extern int isnanf(float); #elif defined(_WIN32) #define isnanf isnan #define isinff isinf #endif #endif //__OS_H_