elf相关内容

在剥离的ELF可执行文件中设置断点

我有一个我想调试的ELF 32位动态链接,剥离文件。尝试在地址处设置断点时,会显示一条消息,指出符号表未加载。 我的问题是: 当你说ELF文件是剥离究竟发生了什么? 您是否剥离了ELF文件? 是否有可能以某种方式重建符号表? 是否可以在gdb中设置断点剥离可执行文件? 解决方案 剥离ELFs是用gnu binutils工具条完成的, strip man page: ..
发布时间:2018-04-21 14:46:47 其他开发

如何使用自定义elf解释器来调试程序?

[ks @ localhost〜] $ gdb我可以调试一些程序(比如/ bin / ls) -q --args / bin / ls 从/bin/ls../中读取符号/从/bin/ls...读取符号(找不到调试符号)...完成。 (找不到调试符号)...完成。 缺少单独的debuginfos,请使用:debuginfo-install coreutils-8.22-19.fc21.x86 ..
发布时间:2018-04-21 14:46:45 其他开发

如何从一个精灵文件中提取函数原型?

在这个问题上我找不到答案。 使用GDB,我可以使用“call”命令来获取函数的原型。 示例: (gdb)call fn $ 1 = {void(int,int)} 0x8048414 < FN> 因此,GDB只能从elf-file中找出fn()返回void然后以两个整数作为参数。 但是,我需要使用其他工具从elf文件中提取函数原型。最好,我想 ..
发布时间:2018-04-21 14:41:23 其他开发

ELF核心文件格式

通过GDB源代码进行挖掘,我可以在哪里找到有关用于创建核心文件的格式的文档? ELF 规范保留了核心文件格式,所以我想这应该是GDB规范的一部分!可悲的是,我从GNU的gdb文档中找不到这方面的任何帮助。 这是我想要做的:将虚拟地址映射到可执行文件/库中的函数名包括运行过程。为此,我首先想从核心文件中找出映射从虚拟地址空间到可执行文件/库的名称,然后挖掘相关文件以获取符号信息。 现在' ..
发布时间:2018-04-21 14:28:53 其他开发

核心转储注释部分

继我的手动生成核心转储文件的问题后,我决定跳水我能够构建基本的核心转储结构,并将我的死程序的内存返回到大型LOAD部分的核心转储中。在GDB中调试时,我的变量回来了,没有问题。 这里有棘手的部分,我该如何让GDB检索程序在崩溃时的位置信息。 我知道,核心转储包含这些信息(cpu寄存器等)。这是一个 objdump -h 给出的“真正的”核心转储: core.28339 :文件格式e ..
发布时间:2018-04-21 14:27:20 其他开发

手动生成精灵核心转储

我正在寻找手动生成一个ELF核心转储文件。 我的程序有一个RAM转储,也可以检索寄存器信息等等。 / p> 有了这些数据,我想要构建一个ELF核心转储文件,类似于当程序崩溃时由Linux内核生成的转储文件,目标是分析此核心转储我一直在寻找核心转储规格或详细格式,但没有找到我想要的: $ b 我的核心转储文件需要哪些部分? 它们如何组织到ELF容器中? $ b 如何从 ..
发布时间:2018-04-21 14:23:39 其他开发

获取a.out文件中符号的位置

这个问题确实很棒解释如何获得一个精灵文件的符号(变量,函数等)。 现在我已经知道他们在哪个位置(模块)的符号。例如,如果我编译一个由文件 main.c 和组成的程序, someFile.h 和 someFile.c 。我们还可以说 main.c 程序包含全局变量 int Counter。,那么我怎样才能知道变量 Counter 位于main.c中? 解决方案 答案位于此处。 。 ..
发布时间:2018-04-21 11:22:41 其他开发

未初始化的全局数据部分是什么?

我对ELF文件中的未初始化全局变量的位置感到有点困惑。我有这个简单的程序来测试变量将在哪些部分: const int a = 11; int b = 10; int c; int main() { return 0; } 我知道未初始化的全局变量应该放入ELF文件的.bss段,但objdump -h给了我以下输出: 部分: Idx名称大小VM ..
发布时间:2018-04-21 11:04:48 其他开发

ELF动态符号表

我有一个关于ELF动态符号表的问题。对于类型为FUNC的符号,我注意到某些二进制文件中的值为0。但在其他二进制文件中,它有一些非零值。这两个二进制文件都是由gcc生成的,我想知道为什么这个区别?是否有任何编译器选项来控制它? 编辑:这是readelf的输出--dyn -syms prog1 符号表'.dynsym'包含5个条目: 编号:值大小类型绑定Vis Ndx名称 0:00000 ..
发布时间:2018-04-21 11:01:30 其他开发

我怎样才能在Linux上生成ELF文件?

我在网上研究了很多关于ELF文件的知识,但是我找不到我想要的东西。我正在Linux OS上编写C和C ++代码,并使用gcc和Kate程序。完成我的代码后,我想生成ELF可执行文件。我只能生成“a.out”文件,我不需要它。我如何获得ELF文件? ELF文件是由什么发生的?或者是否有可能用这个程序生成这个文件? 解决方案 编译器(即 gcc code>或 g ++ )将调用产生ELF可执行 ..
发布时间:2018-04-21 10:50:30 服务器开发

ELF程序头部虚拟地址和文件偏移量

我知道两者之间的关系: lockquote 虚拟地址 mod 页面对齐==文件偏移量 mod 页面对齐 但是有人可以告诉我这两个数字在哪个方向上计算出来吗? 是否根据上述关系计算出文件偏移的虚拟地址,反之亦然? 更新 h2> 这里有一些细节:当链接器写入ELF文件头时,它设置程序头文件的虚拟地址和文件偏移量(段) 例如,输出 readelf -l someEL ..
发布时间:2018-04-21 10:35:51 服务器开发

在C程序中设置堆的开始地址?

有没有办法在linux中设置GCC编译C程序中的堆起始地址?在x86_64系统中,我的测试程序将堆地址设置为4字节的引用地址(小于FFFFFFFF)。我想将它设置为8字节的引用地址进行一些测试(> FFFFFFFF)。 GCC是否提供了设置堆起始地址的方法? 解决方案 您可以使用 sbrk() #include #include # ..
发布时间:2018-04-21 10:29:47 其他开发

程序加载/执行

我是编译器的初学者,但我非常有兴趣了解程序是如何构造的(二进制)以及如何读取和加载到内存中以供执行。你们建议我阅读哪些电子书/书籍/教程以便快速入门? 解决方案 编译器和可执行文件是远程相关的。 (实际的可执行文件是由连接器 ld 编译的,而不是编译器)。 在Linux系统上, a href =“http://en.wikipedia.org/wiki/Linux_kernel”rel = ..
发布时间:2018-04-20 17:33:30 服务器开发

执行init和fini

我刚刚阅读了 init和fini部分在ELF文件中,并给它一个尝试: #include int main(){ puts(“main”); 返回0; } void init(){ puts(“init”); } void fini(){ puts(“fini”); $ / code> 如果我做 gcc -Wl,-init, ..
发布时间:2018-04-20 17:13:19 服务器开发

gcc添加到linux ELF中的功能是什么?

将c(或asm)中的hello-world-like程序与 gcc 链接时,它会在结果可执行文件中添加一些内容。我只知道运行时动态链接器和 _start 入口点,但是这些添加的函数是什么类型的? 00000000004003f0 t deregister_tm_clones 0000000000400430 t register_tm_clones 0000000000400470 ..
发布时间:2018-04-20 17:09:13 服务器开发

ELF动态加载器符号查找顺序

在解析动态重定位时,符号查找的搜索顺序是什么? 解析共享库的符号时,加载器首先搜索'main executable'让主要的可执行文件覆盖定义...)或什么?根据我的理解,每个可执行文件都有自己的“可执行文件”查找范围“: 主要的可执行文件通常是”全局“查找范围中的第一个对象。这意味着主可执行文件中定义的符号会覆盖依赖共享库中的符号。使用 LD_PRELOAD 工具添加的共享对象被添加 ..
发布时间:2018-04-20 16:44:27 服务器开发