elf相关内容

GDB符号从何而来?

当我将Fedora 28的/usr/bin/ls文件加载到GDB中时,即使它不以字符串形式出现也不存在于二进制文件的符号表中,我也可以访问符号abformat_init. $ file /usr/bin/ls /usr/bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, int ..
发布时间:2020-05-01 10:00:57 服务器开发

ELF文件格式如何定义堆栈?

我正在研究ELF文件格式,所以我编译了一个小程序,从生成的可执行文件中转储了节标题及其内容. ELF标头包含入口地址,该地址指向.text节的开头. 我还找到了包含静态数据的.data部分和包含只读数据的.rodata ...我希望堆栈中也有一个部分,但我找不到该部分. 我还希望在某个时候将ESP设置为某个部分的顶部,但在反汇编中找不到类似的内容. 那么ESP如何获得其初始 ..
发布时间:2020-05-01 09:54:18 服务器开发

如何找到没有任何符号信息的elf可执行文件的主函数入口点?

我在Ubuntu-Linux 11.10平台上开发了一个小型cpp程序. 现在,我想对它进行逆向工程.我是初学者. 我使用这样的工具:GDB 7.0,hte编辑器,hexeditor . 我第一次使它变得非常简单.在符号信息的帮助下,我建立了主要功能的地址并完成了我需要的一切. 然后我剥离(--strip-all)可执行文件,我遇到了一些问题. 我知道main函数从该程序中的0x8960开始 ..
发布时间:2020-05-01 09:33:39 服务器开发

.got和.got.plt节有什么区别?

ELF格式的.got和.got.plt节有什么区别? 解决方案 我先前的评论是正确的: 我认为.got用于与全局“变量"有关的重定位,而.got.plt是在解析过程绝对地址时与.plt一起起作用的辅助部分. 下面的示例使事情变得很清楚. 这些是我的32位i686-linux/lib/libm.so的重定位 Relocation section '.rel.dyn' ..
发布时间:2020-05-01 09:28:18 服务器开发

如何获得".a"文件的体系结构?

我有一个.a文件,我想从中获取体系结构信息.运行file myFile.a会导致file.a: current ar archive.如何获得有关文件包含的体系结构的更多信息? 解决方案 您还可以跳过ar命令并使用 readelf -h .a | grep 'Class\|File\|Machine' [00:32:15] /usr/lib $ readelf -h ..
发布时间:2020-05-01 09:28:02 服务器开发

为什么入口点地址在我的可执行文件0x8048330中? (0x330是.text节的偏移量)

我编写了一个小程序来添加两个整数,并使用readelf -a executable_name,它在elf头文件中将入口点地址显示为: Entry point address: 0x8048330 即使在加载程序将其加载到内存之前,我的可执行文件也如何事先知道该地址? elf_format.pdf表示此成员提供了系统首先将控制权转移到的虚拟地址,从而开始了该过程.任何人都可以在这里解释此 ..
发布时间:2020-05-01 09:01:17 服务器开发

如何在Linux架构上即时列出C代码中可用的所有功能/符号?

假定main.c使用来自共享库的符号和在main.c中声明的局部函数. 是否存在一种很好的,优雅的方法来在运行时打印所有可用函数名称和符号的列表? 应该有可能,因为数据已加载到.code段. 解决方案 由于我同样需要在运行时检索所有已加载的符号名称,因此我根据R ..的答案进行了一些研究.因此,这是ELF格式的Linux共享库的详细解决方案,该解决方案可与我的gcc 4.3.4 ..
发布时间:2020-05-01 08:38:40 服务器开发

如何在Linux上检查ELF文件的数据部分的内容?

我一直在使用objdump来查看Linux ELF二进制文件中的汇编代码. 有时会间接跳转到存储在rodata(只读数据)部分中的跳转表中. 如何获取objdump或任何其他工具来向我显示此数据部分的内容? 我可以执行程序并在调试器中检查相关地址,但是我不想这样做,因为它必须以交互方式完成. 理想的答案将是确定一个不仅可以显示内容的工具,还可以让我控制显示格式的工具,就像o ..
发布时间:2020-05-01 08:19:02 服务器开发

如何仅提取ELF部分的原始内容?

我尝试了以下操作,但是生成的文件仍然是ELF,而不仅仅是部分内容. $ objcopy --only-section= 我只想要本节的内容.是否有任何实用程序可以做到这一点?有什么想法吗? 解决方案 围绕objdump和dd的细微改动: IN_F=/bin/echo OUT_F=./tmp1.bin SECTION=.tex ..
发布时间:2020-05-01 08:15:24 服务器开发

将共享库打包到elf中

是否有一个实用程序可以将精灵所需的SO变成 ALL ,然后将其转换为静态,然后将其转换为SO的免费版本? 解决方案 以下是一些您可能会发现有用的项目: 标识符(基本上是您想要的) ERESI (可能会做您想做的,还可以分析ELF目标) 注意:我自己没有使用过任何一个应用程序. ..
发布时间:2020-05-01 08:15:13 服务器开发

为什么Linux二进制文件的虚拟内存地址从0x8048000开始?

在Ubuntu x86系统上反汇编ELF二进制文件我不禁注意到code(.text)部分从虚拟地址0x8048000开始,所有较低的内存地址似乎都未使用. 这似乎很浪费,并且所有Google出现的都是所以我的问题是-对于为什么将布局固定为这些值还是一个确定的答案? 解决方案 来自链接器和加载器图书: 在386系统上,文本基址为0x08048000,它允许在文本下方有相当大的堆栈 ..
发布时间:2020-05-01 08:11:31 服务器开发

确定Linux二进制文件的直接共享对象依赖关系?

如何轻松找出ELF格式的Linux二进制文件的直接共享对象依赖性? 我知道ldd工具,但这似乎可以输出二进制文件的所有依赖项,包括二进制文件所依赖的任何共享对象的依赖项. 解决方案 您可以使用readelf探索ELF标头. readelf -d将直接依赖项列为NEEDED部分. $ readelf -d elfbin Dynamic section at offset 0x ..
发布时间:2020-05-01 08:09:52 服务器开发

如何扩展ELF二进制文件

我正在编写一个小型仪器工具.我必须在二进制文件中插入检测例程.一个好的方法应该是将那些例程插入一个单独的代码段和一个单独的数据段中,您能解释一下如何做到这一点吗?此外,如何修改原始文件中代码段的大小? 最佳, 解决方案 我必须在二进制文件中插入检测例程.一个好的方法应该是将这些例程插入单独的代码段和单独的数据段中 什么是binary file?对可重定位(ET_REL)对象 ..
发布时间:2020-05-01 03:52:10 其他开发

在elf的最后加载部分之后,闪存中存在其他数据

我有一个涉及引导加载程序的STM32项目.引导加载程序会对闪存的整个应用程序区域进行CRC处理,然后将该值与紧随闪存中的应用程序映像区域之后存储的固件标头进行比较. 我写了一个Python脚本,该脚本在二进制文件构建后运行.该脚本将获取生成的elf文件,并将每个部分加载到“虚拟Flash"映像中,该映像表示在应正常加载elf之后,mcu上应显示的内容.数组开始是应用程序区域的大小,每个字节的 ..
发布时间:2020-05-01 03:51:52 其他开发

为什么编译这个简单的汇编代码并链接到ELF会导致比平面二进制文件大得多的大小?

我正在使用类似嵌入式OS的环境,因此二进制文件的大小需要尽可能小.我一直在使用简单的平面二进制文件作为可执行文件,但是现在我正在尝试使用ELF.我只是在使用汇编代码,而是与ld链接.汇编代码: CPU i386 BITS 32 SECTION .text progbits alloc exec nowrite GLOBAL start start: mov eax, 0 add eax ..
发布时间:2020-05-01 03:46:12 其他开发

“输入"是什么意思?在链接描述文件中是什么意思?

我开始学习为微控制器编写一些底层软件,并且已经开始研究链接描述文件. 在这种情况下,我并没有真正了解ENTRY命令的含义.由于大多数微控制器从预定地址开始执行,所以在链接描述文件中选择哪个入口点有什么区别? 解决方案 ENTRY()是一种ELF功能,它基本上只是在可执行文件的ELF标头中设置程序入口地址.此地址可能与二进制文件的第一个可执行段的起始地址不同(如果未定义ENTRY(), ..
发布时间:2020-05-01 03:45:51 其他开发