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);이 라이브러리의 주요 목표 중 하나는 가능한 한 최적화되어야합니다. 여기에서 최적화 된 빌드의 출력이 있습니다.
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 이 라이브러리를 사용하면 누락 된 SYSCALL에 대해 더욱 복원하거나 다른 방식으로 SYSCALL ID를 획득하는 고유 한 사용자 정의 초기화 루틴을 만들 수 있습니다.
JM_INLINE_SYSCALL_ENTRY_TYPE 해시에서 구성 가능 해야하는 자신의 SyScall 입력 유형으로 정의 할 수 있습니다. 기본적으로 syscall_entry_small 이 사용되지만 syscall_entry_full 도 배송됩니다.
제공된 INLINE_SYSCALL 매크로를 사용하려면 제공된 jm::hash 기능을 사용해야합니다.
syscall 항목의 시작을 얻으려면 jm::syscall_entries() 호출하고 제로 항목에 맞을 때까지 반복해야합니다.