elf相关内容

如何使用objdump反汇编一个函数?

我的系统上安装了二进制文件,并希望查看给定功能的反汇编.最好使用objdump,但其他解决方案也是可以接受的. 来自这个问题我了解到,如果我只知道边界地址.通过此答案,我已经学会了如何将拆分后的调试符号变回单个文件. 但是即使对单个文件进行操作,甚至反汇编所有代码(即没有开始或停止地址,但对objdump使用简单的-d参数),我仍然在任何地方都看不到该符号.只要所讨论的函数是静态的,就 ..
发布时间:2020-06-13 18:31:52 其他开发

为什么ELF执行入口虚拟地址的格式为0x80xxxxx,而不是零0x0?

执行后,程序将从虚拟地址0x80482c0开始运行.该地址不是指向我们的main()过程,而是指向由链接程序创建的名为_start的过程. 到目前为止,我对Google的研究只是让我想到了一些(模糊的)历史推测,例如: 在* NIX的端口上,有一个传说传说0x08048000曾经是STACK_TOP(也就是说,堆栈从接近0x08048000朝0向下增长)到i386,这是一组来自加利福尼 ..
发布时间:2020-05-28 21:00:36 其他开发

运行节点应用程序时,bcrypt无效的elf头

我正在为学校设计一个nodejs项目. 我无法使用npm安装bcrypt,因此我安装了bcrypt-nodejs,并且该项目昨天运行良好. 但是今天,当我做一个“节点应用程序"时,我遇到了这个错误: /.../node_modules/bcrypt/node_modules/bindings/bindings.js:79 throw e ^ Err ..
发布时间:2020-05-18 01:51:47 其他开发

在16位实模式和32位保护模式之间切换

我有兴趣编写自己的带有图形支持的微内核.但是,据我所知,没有中断0x10就无法更改图形模式,而这需要实模式.在应用程序运行时如何在实模式和保护模式之间切换?我在 osdev.org 上看到了一篇文章,但是由于我不熟悉汇编程序,所以无法解决来实现这一点. 技术细节: Ubuntu 16.04.4 LTS GCC 7.3.0交叉编译器(i686-elf) NASM 2.11.08汇编程 ..
发布时间:2020-05-16 21:11:13 其他开发

mmap区域上的memset/memcpy失败

我正在尝试从另一个程序中加载一个静态链接程序并执行它.我的步骤是: 解析ELF 从程序头中解析段 对于每个PT_LOAD 加载 跳转到起始地址 如果elf_bytes是映射文件ELF文件,则加载PT_LOAD段为load(&p, elf_bytes + p.p_offset). 加载功能: int load(const Elf64_Phdr *phdr, const ..
发布时间:2020-05-09 23:55:27 服务器开发

分析MIPS二进制文件:是否有用于解析二进制数据的Python库?

我正在开发一个实用程序,该实用程序需要将十六进制地址解析为二进制内的符号函数名称和源代码行号.该实用程序将在x86的Linux上运行,尽管它分析的二进制文件将用于基于MIPS的嵌入式系统. MIPS二进制文件采用ELF格式,并使用DWARF作为符号调试信息. 我目前正计划分叉objdump,传入十六进制地址列表并解析输出以获取函数名称和源代码行号.我已经编译了一个支持MIPS二进制文件的ob ..
发布时间:2020-05-09 22:52:44 Python

CMake:将ELF嵌入可执行文件

我有一个项目,需要访问特殊部分. 我以前是手工制作Makefile的,只是有一个shell脚本,我在其中使用objcopy将要嵌入的目标复制到.o文件中,然后在可执行文件中链接到该文件. # Create a new section and copy the binary there ($1=input $2=output name) objcopy --input-target bi ..
发布时间:2020-05-05 11:56:10 C/C++开发

ElfToolChain-如何在没有包其余部分的情况下构建libelf库?

我需要为一个简单的加载器解析ELF可执行文件的可加载部分.找到了不错的"libelf by Example"教程(由J. Koshy撰写),该教程对ELF的结构进行了很好的概述.然后,它引导我进入 ELF工具链项目,该项目除其他外实现了libelf库ELF处理功能. 使用此库的好处是,它封装了ELF格式的变体,并使代码更具可移植性,并可以将来使用.但是,我发现,为了能够在Ubuntu上构建该 ..
发布时间:2020-05-03 03:26:48 其他开发

为什么ELF可执行文件可以有4个LOAD段?

有一台可以编译用户提供的代码的远程64位* nix服务器(应该用Rust编写,但是我认为这并不重要,因为它使用LLVM).我不知道它使用哪个编译器/链接器标志,但是编译后的ELF可执行文件看起来很奇怪-它具有4个LOAD段: $ readelf -e executable ... Program Headers: Type Offset Vir ..
发布时间:2020-05-02 10:53:40 服务器开发

如何在不加载依赖库的情况下加载共享库?

说我有一个库libfoo.so.1,该库(根据ldd)取决于libbar.so.1.但是,libbar.so.1目前不可用.我的应用程序需要在libfoo.so.1中调用一个完全不需要libbar.so.1的函数. 是否可以加载libfoo.so.1,解析功能符号然后在没有libbar.so.1的情况下调用它来满足依赖关系?这是“我知道我在做什么,就让我已经在做"的情况.我尝试了RTLD_L ..
发布时间:2020-05-01 11:08:10 服务器开发

readelf与objdump:为什么都需要

我需要了解我正在研究的项目的ELF文件布局,并且注意到这些工具的存在. 为什么所有Linux发行版都同时包含readelf和objdump?这些工具相互补充吗?我什么时候更喜欢一个使用另一个? 解决方案 来自binutils/readelf.c: /* The difference between readelf and objdump: Both programs are ..
发布时间:2020-05-01 10:43:15 服务器开发

访问位置无关代码中的.data部分

我正在与NASM建立共享库.在该库中的某些函数中,我需要在C中称为静态变量的东西.基本上,我认为它在.data节中有一定的空间: SECTION .data last_tok: dq 0 ; Define a QWORD 当我尝试在函数中访问 last_tok 时出现问题. 我阅读了 NASM手册:8.2编写Linux/ELF共享库解释了问题并给出了解决方案. ..
发布时间:2020-05-01 10:17:05 服务器开发

如何使用C语言功能识别文件是否为elf文件?

在我的程序中,我想确定文件是否为ELF(可执行和可链接格式)类型.如何使用C语言功能识别文件是否为elf文件? 解决方案 如果要执行的操作仅测试文件是否为ELF,请读取前16个字节以进行检查文件身份.前四个字节将等于{0x7f, 'E', 'L', 'F'}.剩余字节可以有所不同,但是检查它们可以帮助您更加确定文件是否为elf.有关更多详细信息,请参见 elf(3)手册页. 该手册页 ..
发布时间:2020-05-01 10:14:36 服务器开发

Linux如何执行文件?

我想知道Linux操作系统如何执行文件. 因此,通过我在网络上的搜索,我了解到每个可运行位都设置为打开的文件都可以执行.但是后来我了解到有一种称为格式的ELF,这是可执行文件的Linux标准. 所以我想知道,对于具有运行权限(可运行位处于打开状态)的文件,为了在系统中执行代码有什么必要?我可以只使用十六进制编辑器创建一个新文件,然后在其中写入90(NOP操作码)并期望它被执行吗?还是Linu ..
发布时间:2020-05-01 10:12:53 服务器开发

使专有的ELF二进制文件在Linux上可移植

我正在寻找一种方法来制作现有的专有ELF二进制文件,这些文件与特定版本的系统库链接在一起,可移植.对于可移植性,我的意思是使可执行文件可以在具有相同处理器体系结构和兼容系统内核的每个系统上工作,而不必拥有库的源代码(如果没有源代码也没有办法,那也可以) 到目前为止,我想到了两种可能性,但我不知道它们是否完全可能,如果可以,则选择哪种方式: 搜索所有链接的库及其依赖项,并将它们包含在二进 ..

为什么共享库的ELF标头将Linux指定为OSABI?

我的Linux系统(Fedora 9)上的所有标准共享库都将ELFOSABI_NONE(0)指定为其OSABI. 这很好-但是我从供应商那里收到了一个共享库,其中ELF标头中给出的OSABI是ELFOSABI_LINUX(3). 这听起来不像是针对Linux系统的共享库的一个不合理的值,但是它与我所有其他库的值都不一样-因此,当我尝试打开时该库与我的其他库之一一起使用dlopen()导 ..
发布时间:2020-05-01 10:12:31 服务器开发

如何将ELF可执行文件转换为C代码?生成的C代码不必是人类可读的

我有一个ELF文件,我想将其反编译为C代码,并对生成的C代码进行简单的更改,然后将其重建为ELF. 反编译的C代码不需要完全可读.例如,如果混淆了变量和函数名,那就可以了. 我可以使用哪些工具在Linux上完成此任务? PS:如果无法编译为C或将其编译为简单代码,尽管对汇编源代码进行调整对我来说非常困难,但我愿意考虑将其反汇编为汇编语言. 更新:您可能会假设我正在使用以下C ..
发布时间:2020-05-01 10:12:27 服务器开发

Linux上的可执行格式列表

在哪里可以找到Linux系统上批准/支持的可执行格式的列表?我希望找到一个包含 ELF , Shebang , a.out 等的列表. 我已经知道可以在/proc/sys/fs/binfmt_misc中找到用户添加的受支持格式的列表,但是我想查看系统中的内置格式.我在哪里可以得到? 解决方案 内核配置文件包含名为可执行文件格式/仿真的部分.例如,在某些Linux发行版(例如Fedora)上 ..
发布时间:2020-05-01 10:05:39 服务器开发

Linux内核如何确定ld.so的加载地址?

我知道动态链接器使用mmap()来加载库.我猜是内核将可执行文件及其.interp reter都加载到了相同的地址空间中,但是它如何确定位置呢?我注意到在禁用了ASLR的情况下,ld.so的加载地址是0x555555554000(在x86_64上)—该地址来自何处?我尝试按照do_execve()的代码路径进行操作,但是对我来说,它的影响太大了,以至于不会混淆为地狱. 解决方案 详细了解 ..
发布时间:2020-05-01 10:04:08 服务器开发

如何使静态链接的ELF文件加载LD_PRELOAD .so

我有静态链接的二进制文件(ELF文件),没有动态段,.dymsym节,并且不执行LD_PRELOAD命令等. 我该如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 解决方案 我如何创建假的虚拟动态段来激活动态加载程序并执行LD_PRELOAD命令? 你不能. 即使可以,使LD_PRELOAD预先加载某些内容也会 没用:通常您希望在LD_PRELOAD ..
发布时间:2020-05-01 10:02:40 服务器开发