首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汇编语言,如何使用mprotect?

汇编语言,如何使用mprotect?
EN

Stack Overflow用户
提问于 2020-05-27 04:40:46
回答 1查看 217关注 0票数 0

我正在尝试在Linux中进行自我修改的代码。我认为它会工作,但没有。

代码语言:javascript
复制
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 0xffffea

我不知道哪里出了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-27 04:45:41

strace下运行您的程序,如strace ./a.out,以解码系统调用参数并返回值。

可能您的基址不是页面对齐的,或者范围包括一些未映射的页面。您可以使用and ebx, -4096向下舍入到页面边界,也可以通过将align 4096放在_start之前来对齐它。

或者,您可以将您的程序与ld --omagic链接起来,使文本段成为read+write+exec,而不是调用mprotect。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62031056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档