Nur Bibliothek mit Header, mit der Sie direkte Anweisungen für systematische Anweisungen in einer optimierten, nicht zu verwendenden Art und Weise erstellen können.
Alles, was Sie tun müssen, ist, die Header -Dateien zu kopieren und die Initialisierungsfunktion init_syscalls_list aufzurufen, bevor Sie die Macros INLINE_SYSCALL(function_pointer) und INLINE_SYSCALL_T(function_type) verwenden.
// 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);Da eines der Hauptziele dieser Bibliothek so optimiert wie möglich ist, ist dies die Ausgabe eines optimierten Builds.
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 Mit dieser Bibliothek können Sie Ihre eigenen benutzerdefinierten Initialisierungsroutinen erstellen, die sich mehr gegen fehlende Syscalls widerspiegeln oder auf andere Weise Syskall -IDs erwerben.
JM_INLINE_SYSCALL_ENTRY_TYPE kann mit Ihrem eigenen syscalleintragtyp definiert werden, der aus einem Hash konstruierbar sein muss. Standardmäßig wird syscall_entry_small verwendet, aber auch syscall_entry_full wird versendet.
Wenn Sie das bereitgestellte INLINE_SYSCALL -Makro verwenden möchten, müssen Sie die bereitgestellte jm::hash -Funktion verwenden.
Um den Beginn von SYSCall -Einträgen zu erwerben, müssen Sie jm::syscall_entries() anrufen und bis Sie einen Eintrag auf Null getroffen haben.