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
文件中指令的最后地址有点毫无意义。
如果我必须设计某种模拟器,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
文件中指令的最后地址有点毫无意义。