35 lines
688 B
C++
35 lines
688 B
C++
|
|
#pragma once
|
|
|
|
#if !defined(BAD_APPLE_OS_SYSCALL_HPP_INCLUDED)
|
|
#define BAD_APPLE_OS_SYSCALL_HPP_INCLUDED
|
|
|
|
#include <bit>
|
|
#include <cstdint>
|
|
|
|
namespace baos
|
|
{
|
|
enum class Syscall : std::uint64_t
|
|
{
|
|
FILE_READ = 0,
|
|
FILE_WRITE = 1,
|
|
EXIT = 0x3C
|
|
};
|
|
|
|
void setupSyscall() noexcept;
|
|
|
|
template<typename TParam0, typename TParam1, typename TParam2>
|
|
inline void doSyscall(Syscall cmd, TParam0 param0 = 0, TParam1 param1 = 0, TParam2 param2 = 0) noexcept
|
|
{
|
|
register std::uint64_t r8 asm("r8") = param2;
|
|
__asm__ __volatile__(
|
|
"syscall"
|
|
:
|
|
: "D"(cmd), "S"(param0), "d"(param1)
|
|
: "%rcx"
|
|
);
|
|
}
|
|
}
|
|
|
|
#endif // !defined(BAD_APPLE_OS_SYSCALL_HPP_INCLUDED)
|