我一直在使用 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)