可用的 ELF 可执行文件需要哪些部分?

2024-03-31

我正在创建一个 ELF 可执行文件,我需要知道操作系统需要哪些部分才能加载和执行它。

Details:



OS:               Ubuntu 10.04 (64-bit)
Kernel version:   2.6.32-24
Architecture:     i386
  

我意识到以下可能是必要的:

  • .text
  • .symtab
  • .rel.文本

还有其他人吗?


我决定尝试系统地从 GCC 生成的 ELF 文件中剥离部分。

我能够删除许多部分,但无法删除这些部分,并且可执行文件仍然可以执行而不会出现分段错误:



.dynsym
.dynstr
.gnu.version_r
.rel.plt
.init
.plt
.text
.fini
.ctors
.dtors
.dynamic
.got.plt
.data
.strtab
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

可用的 ELF 可执行文件需要哪些部分? 的相关文章

  • 为什么 ELF header 与文本段一起加载到内存中?

    我编译了这个程序 m32 nostdlib进入 ELF 可执行文件 void start 当我这样做的时候readelf l我很惊讶地发现 LOAD 段上的偏移量是 0x000000 因为这意味着可执行标头将与文本段同时加载到内存中 于是我
  • 按需加载/卸载 ELF 部分?

    对于一个相当晦涩的用例 我想要一个 大型 静态链接的 Linux 可执行文件 由一小段控制代码和大段静态 只读 数据组成 为了节省内存 是否可以让加载器仅加载控制代码的部分 然后根据需要手动加载 RO 数据的部分 并在处理完成后再次卸载它们
  • gcc / ld:静态链接 ELF 二进制文件中的重叠部分(.tbss、.init_array)

    我正在 x86 64 机器上的 Debian 7 系统上使用 gcc 版本 4 8 2 Debian 4 8 2 21 静态编译一个非常简单的 hello world 单行代码 gcc test c static o test 我得到一个可
  • 如何在 Linux 上检查 ELF 文件数据部分的内容?

    我一直在使用objdump查看 Linux ELF 二进制文件中的汇编代码 有时会通过存储在中的跳转表进行间接跳转rodata 只读数据 部分 如何获得objdump或任何其他工具可以向我显示此数据部分的内容 我可以执行程序并检查调试器中的
  • 如何从 elf 文件中提取函数原型?

    我没有成功地找到这个问题的答案 使用GDB 我可以使用命令 call 来获取函数的原型 例子 gdb call fn 1 void int int 0x8048414
  • `-rdynamic` 到底有什么作用以及什么时候需要它?

    到底是做什么的 rdynamic or export dynamic在链接器级别 做什么以及它如何与定义的符号可见性相关 fvisibility 标志或可见性pragmas and attribute s For export dynami
  • 汇编器什么时候使用像 R_X86_64_32S 这样的符号扩展重定位而不是像 R_X86_64_32 这样的零扩展更好?

    举个具体的例子 在 GAS 2 24 上 移动地址 mov s eax s After as 64 o a o a S objdump Sr a o 使用零扩展 0000000000000000
  • Linux 用户空间 ELF 加载器

    我需要做一件相当不寻常的事情 手动执行 elf 可执行文件 IE 将所有部分加载到正确的位置 查询 main 并调用它 然后进行清理 可执行文件将被静态链接 因此不需要链接库 我还控制基地址 所以不用担心可能的冲突 那么 有没有相关的库呢
  • linux下如何将PE(Portable Executable)格式转换为ELF

    将 PE 二进制文件转换为 ELF 二进制文件的最佳工具是什么 以下是这个问题的简要动机 假设我有一个简单的 C 程序 我使用 Linux 的 gcc 编译它 这给出了 ELF 并使用 Windows 的 i586 mingw32msvc
  • 裸机 RISC-V CPU - 处理器如何知道从哪个地址开始获取指令?

    我正在设计自己的 RISC V CPU 并且已经能够实现一些指令代码 我已经安装了 RV32I 版本的 GCC 编译器 所以我现在有了汇编器riscv32 unknown elf as可用的 我正在尝试仅用一条指令来汇编一个程序 simpl
  • 如何解释elf符号表部分的st_info字段

    The man page http manpages ubuntu com manpages xenial man5 elf 5 html有这样说 st info This member specifies the symbol s typ
  • 在加载的 ELF(.so 共享库)中挂钩并替换导出函数

    我正在编写一些 C 代码来将 so ELF 共享库 的某些函数加载到内存中 我的 C 代码应该能够重定向另一个加载到应用程序 程序内存中的 so 库的导出函数 这里有一些详细说明 Android 应用程序将加载多个 so 文件 我的 C 代
  • 如何将elf中的地址转换为物理地址

    我知道操作系统会将 elf 加载到物理内存中 执行时jmp elf address 系统将检查tlb并将elf地址转换为物理地址 我很困惑 elf address 没有段号和页号 操作系统如何将 elf address 转换为 MMU 需要
  • 将共享库打包到 elf 中 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个实用程序可以ALL精灵需要的SO将它们变成静态然后将精灵转换为SO的自由 以下是一些您可能会
  • 将自定义数据嵌入到不会被 ld.so 映射的 ELF 文件中

    我有一个 500MB 的文件 其中包含一些自定义数据 即 ZIP 存档 我想将它嵌入到我的 ELF 可执行文件中 这样当我分发 ELF 文件时 我将只能发送 1 个文件而不是 2 个文件 问题是我不希望在我的应用程序启动时操作系统自动加载这
  • ELF的基址

    我正在尝试查找 ELF 文件的基地址 我知道您可以使用 readelf 来查找程序入口点和不同部分的详细信息 基址 大小 标志等 例如 x86 架构的程序通过链接器基于 0x8048000 使用 readelf 我可以看到程序入口点 但输出
  • 在运行时访问 build-id

    我试图弄清楚如何访问链接器在运行时生成的构建 ID 从这个页面开始 https linux die net man 1 ld https linux die net man 1 ld 当我构建一个测试程序时 例如 gcc test c o
  • 表视图重新加载部分崩溃

    我有一个包含 4 个部分的表格视图 每个部分有 1 2 个表格视图单元格 第一个单元格有一个 uiswitch 作为附件视图 控制应用程序的颜色主题 在白天模式和夜间模式之间切换 一旦按下开关 就会调用一个函数 更改导航栏的颜色和背景颜色
  • 如何去掉 LATEX 报告文档类中节编号中的零?

    所以我正在使用 Latex 编写报告 我使用的文档类是报告 documentclass a4paper 报告 但由于某种原因 节编号的编写方式是在其前面加上 0 例如 它看起来像 0 1 Introduction 0 2 Theory 0
  • 更改 elf 调试信息中列出的源文件

    基本上我希望能够更改 elf 二进制文件中 debug dwarf 部分中源文件的路径 基本上我希望能够更改 elf 二进制文件中 debug dwarf 部分中源文件的路径 什么东西阻止你 该路径存储在 debug str二进制文件的一部

随机推荐