段指令末尾的冒号导致段错误
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
部分,也未标记为可执行文件。
我不小心在 section
指令末尾包含了一个冒号 (:
),这是一个半常见的错误:
section .text:
_start:
完成 .text
部分后,这会导致 SIGSEGV
在执行第一条指令之前,我很好奇为什么。
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
部分,也未标记为可执行文件。