gpt4 book ai didi

elf - 对于 ELF 文件,如何判断哪个部分包含执行二进制代码?

转载 作者:行者123 更新时间:2023-12-04 17:29:29 29 4
gpt4 key购买 nike

我正在学习 ELF 并且有一段时间的疑问。我试图寻找答案,但徒劳无功。如果有人能给我答案或引导我到地方寻找答案,我会很感激。

我读到的几乎所有关于 ELF 的文档都说 .text 部分包含可执行的二进制代码(并且 .data 包含数据......)。但是,当我使用 readelf 查看 obj 文件中包含的部分时,我没有看到 .text 部分,而是看到一个名为 i.main 的部分,其中包含可执行代码(从本部分包含的代码中我找到了机器代码)。下面是readelf解析出来的section
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] i.main PROGBITS 00000000 000034 00000a 00 AX 0 0 2
[ 2] .arm_vfe_header PROGBITS 00000000 000040 000004 00 0 0 4
[ 3] .comment PROGBITS 00000000 000044 0001c6 00 0 0 1
[ 4] .debug_frame PROGBITS 00000000 00020a 00003c 00 0 0 1
[ 5] .debug_info PROGBITS 00000000 000246 000088 00 0 0 1
[ 6] .debug_info PROGBITS 00000000 0002ce 0000dc 00 0 0 1
[ 7] .debug_line PROGBITS 00000000 0003aa 000030 00 0 0 1
[ 8] .debug_line PROGBITS 00000000 0003da 000044 00 0 0 1
[ 9] .debug_loc PROGBITS 00000000 00041e 000014 00 0 0 1
[10] .debug_macinfo PROGBITS 00000000 000432 000308 00 0 0 1
[11] .debug_pubnames PROGBITS 00000000 00073a 00001b 00 0 0 1
[12] __ARM_grp..debug_ GROUP 00000000 000758 000008 04 14 14 4
[13] .debug_abbrev PROGBITS 00000000 000760 0005a4 00 G 0 0 1
[14] .symtab SYMTAB 00000000 000d04 000110 10 21 13 4
[15] .rel.debug_frame REL 00000000 000e14 000010 08 14 4 4
[16] .rel.debug_info REL 00000000 000e24 000018 08 14 5 4
[17] .rel.debug_info REL 00000000 000e3c 000038 08 14 6 4
[18] .rel.debug_line REL 00000000 000e74 000008 08 14 8 4
[19] .rel.debug_pubnam REL 00000000 000e7c 000008 08 14 11 4
[20] .shstrtab STRTAB 00000000 000e84 0000f2 00 0 0 1
[21] .strtab STRTAB 00000000 000f76 0001b3 00 0 0 1
[22] .ARM.attributes ARM_ATTRIBUTES 00000000 001129 000044 00 0 0 1

似乎可以任意选择部分名称(我对吗?)如果是这样,那么我的问题是

  • 如何判断哪个部分包含什么? (例如,哪个部分包含代码,哪个部分包含只读数据......)。
  • 如何知道每个段的定义,例如我怎么知道“[12] __ARM_grp..debug_”段是为了什么目的?

  • 提前致谢。

    最佳答案

    至于您的问题的第一部分,在确定哪些部分包含代码以及哪些部分包含只读数据时,寻找部分属性标志是一件好事。

    readelf -S命令,一个 X表示该部分包含可执行指令,A表示该section在进程执行过程中占用内存,出现W表示该部分应该是可写的。

    所以在你的目标文件中,有一个部分,i.main它是可执行的,也是只读的。其他部分不可写,但不能只读,因为它们根本不在内存中。

    我对 ARM 二进制文件不是很熟悉,所以我无法真正解决您问题的其他部分。

    关于elf - 对于 ELF 文件,如何判断哪个部分包含执行二进制代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51923257/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com