簡體   English   中英

組裝,如何使用mprotect?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM