inline_syscall
1.0.0
ヘッダーのみのライブラリにより、最適化された、間に、無線で使いやすい方法で直接的なsyscall命令を生成できます。
INLINE_SYSCALL(function_pointer)およびINLINE_SYSCALL_T(function_type)マクロを使用する前に、ヘッダーファイルをコピーして初期化関数init_syscalls_listを呼び出すことです。
// 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);このライブラリの主な目標の1つは、可能な限り最適化されることであるため、最適化されたビルドの出力です。
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 このライブラリを使用すると、Syscallsの欠落に対してより多くの回復力のある独自のカスタム初期化ルーチンを作成したり、他の方法でSyscall IDを取得したりできます。
JM_INLINE_SYSCALL_ENTRY_TYPE 、ハッシュから構成できる必要がある独自のSyscallエントリタイプで定義できます。デフォルトでは、 syscall_entry_smallが使用されますが、 syscall_entry_fullも出荷されます。
提供されたINLINE_SYSCALLマクロを使用する場合は、提供されたjm::hash関数を使用する必要があります。
syscallエントリの開始を取得するにはjm::syscall_entries()を呼び出し、ゼロエントリを押すまで繰り返す必要があります。