段指令末尾的冒号导致段错误

Colon at end of section directive causes segfault

我不小心在 section 指令末尾包含了一个冒号 (:),这是一个半常见的错误:

section .text:
    _start:

完成 .text 部分后,这会导致 SIGSEGV 在执行第一条指令之前,我很好奇为什么。

GDB 中的

maintenance info sections 显示了正在发生的事情。

没有冒号:

gef➤  maintenance info sections 
Exec file:
    `my/path', file type elf64-x86-64.
 [0]     0x00401000->0x00401005 at 0x00001000: .text ALLOC LOAD READONLY CODE HAS_CONTENTS

带冒号:

gef➤  maintenance info sections 
Exec file:
    `my/path', file type elf64-x86-64.
 [0]     0x00401000->0x00401005 at 0x00001000: .text: ALLOC LOAD READONLY DATA HAS_CONTENTS

.text ... CODE 对比 .text: ... DATA.

因此,冒号似乎被视为部分名称的字面意思。因此,它不被视为 .text 部分,也未标记为可执行文件。