Это не совсем верно:
; rsi must have the page length
Здесь rsi
- это второй аргумент вызова mprotect()
, который должен быть длиной области, которую вы изменяете. Если вы хотите, чтобы длина области была больше, чем одна страница, вам нужно, чтобы rsi
было больше значения, полученного из call getpagesize
.
В частности, может быть, вы хотите что-то еще, как:
call getpagesize
; rax has 0x1000
mov rcx, rax
; save rax for later use when passing to mprotect
sub rcx, 0x1
not rcx
mov rdi, %1
and rdi, rcx
; AND them and the result will be stored in rcx
; rdi must hold the page_start address
mov rsi, r15 ;rsi = end
sub rsi,rdi ;rsi = end - aligned_start = length
mov rdx, 0x7
; read+write+exec = 0x7
call mprotect