ELF的.text段结束也是指令执行的结束吗?

Is ending of .text section of ELF also the ending of instruction execution?

如果我必须设计某种模拟器,ELF的.text部分的结束地址(通过起始地址和.text的大小找到)是否可以被视为指令的结束位置?

从某种意义上说,.text段的最后地址是否可以作为最后一条指令地址?

can the last address of .text section be treated as the last instruction address?

.text 部分的最后地址确实是 那个 部分的最后一条指令(的结尾)。

但是 ELF 规范中没有任何内容可以阻止文件在 other 部分中包含可执行指令。事实上,这很常见。例如:

 readelf -WS /bin/ls | grep ' AX'
  [11] .init             PROGBITS        0000000000004000 004000 000017 00  AX  0   0  4
  [12] .plt              PROGBITS        0000000000004020 004020 0006b0 10  AX  0   0 16
  [13] .plt.got          PROGBITS        00000000000046d0 0046d0 000018 08  AX  0   0  8
  [14] .text             PROGBITS        00000000000046f0 0046f0 01254e 00  AX  0   0 16
  [15] .fini             PROGBITS        0000000000016c40 016c40 000009 00  AX  0   0  4

.init.fini.text等都包含可执行指令。

更新:

So if I can run the following command on the elf input file, can I consider the last address in the last executable section as end of instructions?

如果您正在编写模拟器,您肯定不想 运行 readelf 并解析其输出,而是直接 解析信息] 通过读取 ELF 文件并解析其内容。

另请注意,可执行文件可以 mmap(..., PROT_READ|PROT_EXEC, ...)mprotect 其他可执行部分,因此知道 ELF 文件中指令的最后地址有点毫无意义。