[英]assembly, how to use mprotect?
我正在嘗試在 Linux 中進行自我修改代碼。 我以為它會起作用,但沒有。
section .data
section .text
global _start
_start:
mov eax, 125 ;mprotect syscall number
mov ebx, _start ; *addr
mov ecx, 0x10000 ;page interval.
mov edx, 7 ; rwx permission
int 0x80
jmp modify
target:
mov eax, edx
halt:
mov ebx, 1
mov eax, 1
int 0x80
modify:
mov ebx, [new]
mov [target], ebx
jmp target
new:
mov ebx, 0
我在 ubuntu 18.04 上使用了 nasm。
INT 0x80 返回值為-22 0xffffffea
我不知道出了什么問題。
在strace
下運行您的程序,例如strace./a.out
以解碼系統調用參數並返回值。
可能您的基地址不是頁面對齊的,或者該范圍包括一些未映射的頁面。 您可以使用and ebx, -4096
向下舍入到頁面邊界,或者您可以通過在_start
之前放置align 4096
來對齊 _start。
或者,您可以將程序與ld --omagic
鏈接起來,而不是自己調用 mprotect,以使文本段為 read+write+exec。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.