elf相关内容

获取小精灵部分的偏移量

我正在尝试获取elf文件各部分的偏移量和数据。 我已经有了使用此代码的部分名称: #include #include #include #include #include int filesize(int fd) { return(lseek(fd,0, ..
发布时间:2020-10-28 21:28:45 服务器开发

elf加载程序如何初始化全局变量

对于C中的全局变量,例如 int aglobal = 5; 5何时转移装入程序将其放入aglobal中,以及如何知道将5放入aglobal中。 在函数中带有静态声明的相同情况。像 int afunc() { static int astatic = 8; 返回静态值; } 解决方案 在数据节中形成一个int大小的空间,在其中编码了值5,并且名为“ aglob ..
发布时间:2020-10-28 21:28:43 其他开发

我可以执行驻留在数据段(ELF二进制)中的代码吗?

在理解二进制文件(虚拟内存布局,执行...等)的方式中,我编写了 C 代码,该代码声明了一个包含字符串的全局字符串。可执行代码,然后我使用一个简单的技巧通过声明一个指针( PTR main()函数的返回地址到该可执行代码/ code>)在$code> main()中,这是在堆栈上保留的本地内存区域2个字,距 main(),所以我要做的就是将返回地址的地址分配给该指针(PTR =(int *)& P ..
发布时间:2020-10-28 21:28:39 其他开发

将静态链接的elf二进制文件转换为动态链接的

我有一个elf二进制文件,它已经静态链接到libc。 我无权访问其C代码。 我想使用OpenOnload库,该库在用户空间中实现了套接字,因此与标准libc版本相比,其延迟较低。 OpenOnload实现标准套接字api,并使用LD_PRELOAD覆盖libc版本。 但是,由于此elf二进制文件是静态链接的,因此它不能使用套接字API的OpenOnload版本。 我相信将其转换为动态 ..
发布时间:2020-10-28 21:28:35 服务器开发

是否真的需要ELF .notes部分?

在Linux上,我试图将静态链接的ELF文件剥离为基本内容。当我运行时: strip-不需要的strip foo 或 strip --strip-all foo 生成的文件仍然带有一个胖的.notes部分,看起来充满了时髦的字符串。 真的需要.notes部分,还是可以用--remove-section安全地将其删除? 感谢您 ..
发布时间:2020-10-28 21:28:32 其他开发

ELF中的字符串表

我得到一些符号,并且得到了elf文件的hexedit。我怎么知道这个符号出现在哪个部分? strtab 和 shstrtab ?还有一个符号字符串数组吗? 当我在名称表中获得索引时,它在 strtab 或 shstrtab ? 解决方案 对于第一个问题,我们需要妖精文件的hexedit才能正确理解。 对于第二个问题- strtab代表String表 shstrtab代 ..
发布时间:2020-10-28 21:28:21 其他开发

如何知道ELF目标文件中的调试信息类型?

我有一个ELF对象文件。我想知道它包含哪种类型的调试信息。 它是使用Diab编译器(C源代码)针对PPC体系结构进行编译的。我很确定它是用调试符号构建的。 我尝试使用 dwarfdump 提取调试信息,但是我没有用,所以我想调试信息是 $ dwarfdump file.elf file.elf 中没有DWARF信息 使用objdump显示调试信息为空。 ..
发布时间:2020-10-28 21:28:19 其他开发

在ELF文件中编辑变量值?

我需要在已编译的ELF文件中更改几个变量。为了清楚地说明这一点,我将使用一个简单的C结构作为示例。 将单个源文件编译并从MyFile链接(@ 0x1000)到MyFile.elf中.c: typedef struct { uint32_t SerialNumber; / *每次编程时递增* / uint32_t零件编号; / *始终相同* / char ProdDateTi ..
发布时间:2020-10-28 21:26:59 C/C++开发

使用十六进制编辑器在ELF可执行文件中查找整数声明的变量

我想通过使用十六进制编辑器来更改可执行文件中整数声明变量的值,这仅是假设我知道代码中声明了一个变量类型为int且该变量是这样的: int值= 1337; 我要使用以下命令编辑可执行文件十六进制编辑器搜索值1337并将其更改为其他值,我在ubuntu中尝试了ghex,但我不知道如何搜索,我将其转换为十六进制,但是我找不到它,在此先感谢您。 / p> 解决方案 首先,您将使用 re ..
发布时间:2020-10-28 21:26:57 其他开发

从ELF目标文件中转储C结构大小

如何从带有调试符号的ELF对象文件中提取所有C结构的大小? 可以通过GDB使用“ print sizeof( some_struct)”,但我需要获取所有结构的清单。 我看过“ nm”和“ objdump”,但我没有查看执行我要寻找的选项。有没有办法使用标准的Unix工具来做到这一点,还是我需要从ELF文件中提取调试符号部分并自己处理?我希望不是后者。 在此先感谢您的任何建议。 ..
发布时间:2020-10-28 21:25:49 其他开发

如何阻止GCC合并共享相同后缀的字符串文字?

GCC似乎在进行优化,在其中合并了共享相同后缀的字符串文字。 例如,包含两个字符串文字“ foo bar” 和“ bar” 可以以最终的 ELF 形式结尾(1)字符串表更改为具有单个字符串文字“ foo bar” ,并且(2)更改了程序,以便任何指向“ bar” 转换为现在将 4 个字符指向字符串“ foo bar” 。请注意,从仅向前读取C程序的角度来看,第二个文字仍然看起来像“ bar” ..
发布时间:2020-10-28 21:24:44 其他开发

所有的asm标签成为可执行文件中的符号

使用 nasm 组装对象时,我发现所有标签都作为符号包含在结果 .o 文件,以及最终的二进制文件。 这对于我声明为 GLOBAL ,以及节的开始部分(例如, .text 节),但是标签只是用作循环入口点而几乎全部出现在标签中似乎很奇怪。输出文件。除了泄漏内部实现细节之外,它还浪费了符号表中的空间。 例如,鉴于此简短的汇编程序: GLOBAL _start _start: ..
发布时间:2020-10-28 21:24:34 其他开发

elf文件中的全局变量在哪里

我想了解elf文件,但是当我想到全局变量,全局静态变量和作用域静态变量时, 会让我有些困惑。例如: int a = 2; int b; 静态整数c = 4; static int d; void fun(){ static int e = 6; static int f; } int main(void){ fun(); } ..
发布时间:2020-10-28 21:24:05 服务器开发

ELF可执行文件中.dynamic .dynsym和.dynstr之间的区别

我的初步知识是: .dynamic 包含以下库:可执行文件需要加载 .dynsym 包含外部符号,如 setsockopt@GLIBC_2.0 .dynstr 包含函数要求的字符串 总体而言,对于这些部分如何共同创建二进制文件-尤其是 .dynsym 和,我有些困惑。 dynstr 。所以我的问题有两个。我上面的陈述正确吗?如果是这样,这三个部分如何协同工作以创建二进制文件? ..
发布时间:2020-10-28 21:24:03 服务器开发

readelf显示的符号表各列的含义是什么?

有人可以使用 readelf 解释符号表中显示的列吗? 解决方案 请考虑以下内容: 符号表 .symtab 包含1203个条目: 数值:值大小类型绑定Vis Ndx名称 310:a0008120 0 NOTYPE GLOBAL DEFAULT ABS _gp 734:a0000010 32对象GLOBAL默认值77 v 818:9d000018 496 FUNC GL ..
发布时间:2020-10-28 21:23:55 其他开发

区分共享对象和位置无关的可执行文件

我正在寻找一种快速的方法来检查ELF二进制文件是共享对象还是位置无关的可执行文件。我认为可以通过检查包含的符号/功能来做到这一点。我正在寻找一种无需读取完整文件的更有效方法。我必须在不同的平台(至少Android,Linux(32和64位))上执行检查。 解决方案 我正在寻找一种快速的方法来检查ELF二进制文件是共享对象还是位置独立可执行文件。 没有办法进行检查:PIE可执行文件 ..
发布时间:2020-10-28 21:23:53 其他开发

在ELF文件中,如何确定_start的地址?

我一直在阅读ELF规范,无法弄清楚程序入口点和_start地址从何而来。 似乎它们应该位于一个相当一致的地方,但是我做了一些琐碎的程序,并且_start总是在另一个地方。 有人可以澄清吗? 解决方案 _start 符号可以在任何目标文件中定义。通常它是自动生成的(它对应于C中的 main )。您可以自己生成它,例如在汇编源文件中: .globl _start _st ..
发布时间:2020-10-28 21:23:48 其他开发

如何获得自定义ELF部分的开始和结束地址?

我正在Linux上使用C语言工作。我已经看到gcc的用法 __ section __ 属性(尤其是在Linux内核中)可将数据(通常是函数指针)收集到自定义ELF部分中。 解决方案 只要这些部分的名称出现在以下位置,如何检索和使用这些自定义部分中的“东西”?一个有效的C变量名称 gcc (而 ld 则)会生成两个魔术变量: __ start_SECTION 和 __ stop_SECTIO ..
发布时间:2020-10-28 21:23:46 其他开发