Hanya perpustakaan header yang memungkinkan Anda untuk menghasilkan instruksi syscall langsung dalam cara yang dioptimalkan, tidak dapat digunakan dan mudah digunakan.
Yang harus Anda lakukan adalah menyalin file header dan memanggil fungsi inisialisasi init_syscalls_list sebelum menggunakan INLINE_SYSCALL(function_pointer) dan INLINE_SYSCALL_T(function_type) makro.
// This header contains the initialization function.
// If you already initialized, inline_syscall.hpp contains all you need.
# include " inline_syscall/include/in_memory_init.hpp "
// Needs to be called once at startup before INLINE_SYSCALL is used.
jm::init_syscalls_list ();
// Usage of the main macro INLINE_SYSCALL
void * allocation = nullptr ;
SIZE_T size = 0x1000 ;
NTSTATUS status = INLINE_SYSCALL(NtAllocateVirtualMemory)((HANDLE)- 1 , &allocation, 0 , &size, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);Karena salah satu tujuan utama perpustakaan ini adalah untuk dioptimalkan mungkin di sini adalah output dari bangunan yang dioptimalkan.
mov qword ptr [ rsp + 30h ], 0 ; void* allocation = nullptr
mov qword ptr [ rsp + 28h ], 1000h ; SIZE_T size = 0x1000;
mov eax , dword ptr [ entry ( 07FF683157004h ) ] ; syscall id is loaded
lea rdx , [ rsp + 30h ] ; BaseAddress = &allocation
lea r9 , [ rsp + 28h ] ; RegionSize = &size
mov r10 , 0FFFFFFFFFFFFFFFFh ; ProcessHandle = -1
xor r8d , r8d ; ZeroBits = 0
sub rsp , 40h ; preparing stack
mov qword ptr [ type ], 3000h ; AllocationType = MEM_RESERVE | MEM_COMMIT
mov qword ptr [ protect ], 4 ; Protect = PAGE_READWRITE
syscall ; syscall instruction itself
add rsp , 40h ; restoring stack Perpustakaan ini memungkinkan Anda untuk membuat rutinitas inisialisasi khusus Anda sendiri yang lebih tahan terhadap syscall yang hilang atau memperoleh ID syscall dengan cara lain.
JM_INLINE_SYSCALL_ENTRY_TYPE dapat didefinisikan dengan tipe entri syscall Anda sendiri yang perlu dibangun dari hash. Secara default syscall_entry_small digunakan, tetapi syscall_entry_full juga dikirim.
Jika Anda ingin menggunakan makro INLINE_SYSCALL yang disediakan, Anda perlu menggunakan fungsi jm::hash yang disediakan.
Untuk memperoleh dimulainya entri Syscall, Anda perlu memanggil jm::syscall_entries() dan mengulangi sampai Anda mencapai entri nol.