小编xKa*_*tsu的帖子

创建带有只读标志的程序头会导致段错误

我一直在使用 NASM 编写 ELF 二进制文件,并创建了一个打开只读标志的段。运行程序会导致段错误。我在 replit 中测试了该程序,它运行得很好,所以有什么问题?我在 .rodata 部分创建了一个带有 hello world 字符串的常规 NASM hello world 程序,并且运行良好。我用 readelf 检查了二进制文件以确保字符串在只读段中。

我想出的唯一解决方案是在 Rodata 段中设置可执行标志,以便它具有读取/执行权限,但这很糟糕,我希望 Rodata 段是只读的。

这是 ELF-64 hello world 的代码。

; hello.asm
[bits 64]
[org 0x400000]

fileHeader:
    db 0x7F, "ELF"
    db 2 ; ELF-64
    db 1 ; little endian
    db 1 ; ELF version
    db 0 ; System V ABI
    db 0 ; ABI version
    db 0, 0, 0, 0, 0, 0, 0 ; unused
    dw 2 ; executable object file
    dw …
Run Code Online (Sandbox Code Playgroud)

linux assembly x86-64 elf

0
推荐指数
1
解决办法
61
查看次数

标签 统计

assembly ×1

elf ×1

linux ×1

x86-64 ×1