elf相关内容

如何让 GCC 将 .text 部分编译为可写在 ELF 二进制文件中?

我希望能够动态更改我正在使用的库中的可执行代码.本质上,如果不需要某些功能,我想动态 NOP. 但是,我使用的库的 .text 部分是不可写的(大多数程序都是这种情况).我有库的源代码,因此想使用 GCC 将其编译为可写的. 有没有办法做到这一点? 解决方案 在一般意义上,mprotect 是 sys/mman.h(检查 http://linux.die.net/man/2/m ..
发布时间:2021-12-18 23:09:02 C/C++开发

如何检索用于编译给定 ELF 可执行文件的 GCC 版本?

我想检索用于编译给定可执行文件的 GCC 版本.我试过 readelf 但没有得到信息.有什么想法吗? 解决方案 一般存放在评论区 strings -a |grep "GCC: (" 返回海湾合作委员会:(GNU)X.X.X strip -R .comment 字符串 -a |grep "GCC: (" 不返回任何输出 通过删除 .comment(以及 .note)部分以减小 ..
发布时间:2021-12-18 23:00:53 其他开发

如何在没有共享库的情况下,使用 GMP、MPFR、MPC、ELF 逐个安装 GCC?

如何使用当前版本逐个安装 GCC(GNU 编译器集合), 使用正确版本的依赖项,不使用包管理器(如 yum、rpm、apt、dpkg),也不使用共享库? 典型的开发人员可能希望以典型方式安装 GCC,使用您的包管理器(yum、rpm、apt、dpkg、port、brew 等)或按照此处的说明进行操作(http://gcc.gnu.org/wiki/InstallingGCC). 我的 ..
发布时间:2021-12-18 22:42:06 其他开发

程序启动时的默认寄存器状态是什么(asm、linux)?

当程序启动时 (linux, elf) - eax、ebx 等中是否有零或可以有任何东西(我没有做任何调用或使用外部库)?在我的机器上确实如此,我可以在编写 asm 程序时中继这种行为吗? 解决方案 这完全取决于每个平台的 ABI.既然你提到了 eax 和 ebx 让我们看看 x86 的情况.在 fs/binfmt_elf.c 行 #972 中,在 load_elf_binary() 中, ..
发布时间:2021-12-18 09:29:09 服务器开发

为什么PLT除了GOT之外还存在,而不是仅仅使用GOT?

我知道在典型的 ELF 二进制文件中,函数是通过过程链接表 (PLT) 调用的.函数的 PLT 条目通常包含跳转到全局偏移表 (GOT) 条目.这个入口会先引用一些代码,将实际函数地址加载到GOT中,并包含第一次调用(延迟绑定)后的实际函数地址. 准确地说,在将 GOT 入口点延迟绑定回 PLT 之前,跳转到 GOT 之后的指令.这些指令通常会跳转到 PLT 的头部,从那里调用一些绑定例程, ..
发布时间:2021-12-18 09:19:48 其他开发

有没有人能够创建 PE COFF 和 ELF 的混合体?

我的意思是一个二进制文件可以在 Win32 和 Linux i386 中运行吗? 解决方案 这是不可能的,因为两种类型的格式有冲突: PE 文件的前两个字符必须是 'M' 'Z'; ELF 文件的前四个字符必须是 '\x7f' 'E' 'L' 'F'. 显然,您无法创建同时满足两种格式的文件. 为了回应有关多语言二进制文件既可用作 16 位 COM 文件又可用作 Lin ..
发布时间:2021-12-18 08:07:28 服务器开发

在节头 elf 文件中获取 sh_name 成员

我正在尝试通过访问 elf 文件的 sh_name 成员来获取部分名称的正确偏移量,但它一直给我零或空... 我应该只使用 mmap() 和 elf.h - 没有辅助函数 所以我做到了: void* map_start = mmap(0, fd_stat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0))header = (Elf ..
发布时间:2021-12-15 08:11:45 服务器开发

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

有一个远程 64 位 *nix 服务器可以编译用户提供的代码(应该用 Rust 编写,但我认为这无关紧要,因为它使用的是 LLVM).我不知道它使用哪个编译器/链接器标志,但编译后的 ELF 可执行文件看起来很奇怪 - 它有 4 个 LOAD 段: $ readelf -e 可执行文件...程序标题:类型 Offset VirtAddr PhysAddrFileSiz MemSiz 标志对齐.. ..
发布时间:2021-12-14 23:39:54 服务器开发

如何使用十六进制编辑器在 Linux 中制作可执行的 ELF 文件?

只是好奇.这显然不是实际编程的一个很好的解决方案,但假设我想在 Bless(一个十六进制编辑器)中制作一个可执行文件. 我的架构是 x86.我可以制作什么非常简单的程序?你好世界?无限循环?类似于这个问题,但在Linux中. 解决方案 正如我在评论中提到的,您实际上将为可执行文件编写自己的 elf-header,以消除不需要的部分.还有几个必需的部分.Muppetlabs-TinyP ..
发布时间:2021-12-03 13:41:14 服务器开发

Linux 可执行文件 .data 部分的默认行为在 5.4 和 5.9 之间发生了变化?

故事 案例 1 我不小心在 .data 部分编写了我的汇编代码.我编译并执行了它.程序在 Linux 5.4.0-53-generic 下正常运行,即使我没有指定像 execstack 这样的标志. 情况 2: 之后,我在Linux5.9.0-050900rc5-generic下执行了程序.程序得到SIGSEGV.我通过阅读 /proc/$pid/maps 检查了虚拟内存权 ..
发布时间:2021-12-03 13:37:22 服务器开发

带有 GCC 的 C/C++:静态地将资源文件添加到可执行文件/库

有人知道如何使用 GCC 将任何资源文件静态编译成可执行文件或共享库文件吗? 例如,我想添加永远不会更改的图像文件(如果更改,我无论如何都必须替换该文件)并且不希望它们位于文件系统中. 如果这是可能的(我认为这是因为 Visual C++ for Windows 也可以这样做),我如何加载存储在自己的二进制文件中的文件?可执行文件是否解析自身、找到文件并从中提取数据? 也许我还没 ..
发布时间:2021-12-03 12:59:05 服务器开发

ELF文件格式的section和segment有什么区别

来自维基可执行和可链接格式: 段包含文件运行时执行所需的信息,而段包含用于链接和重定位的重要数据.整个文件中的任何字节最多只能由一个节拥有,并且可以存在不为任何节所有的孤立字节. 但是section和segment有什么区别呢?在一个可执行的 ELF 文件中,一个段是否包含一个或多个段? 解决方案 但是section和segment有什么区别? 正是您引用的内容:段包 ..
发布时间:2021-12-03 12:56:46 服务器开发

CentOS 64 位错误的 ELF 解释器

我刚刚安装了 CentOS 6 64 位版本,我正在尝试在 64 位机器上安装 32 位应用程序并收到此错误: /lib/ld-linux.so.2: 错误的 ELF 解释器:没有那个文件或目录 我是 Linux 新手.我该如何解决? 解决方案 您使用的是 64 位系统,并且没有安装 32 位库支持. 安装(基线)对 32 位可执行文件的支持 (如果您在设置中不使用 ..
发布时间:2021-11-26 14:38:58 服务器开发

如何使用 go1.6.2 为 linux 32 位构建

是否可以设置 GOARCH 和 GOOS 值的任何组合以构建 ELF 32 位二进制文​​件? 解决方案 GOOS=linux 和 GOARCH=386. 更多示例:架构: 32 位 ->GOARCH=38664 位 ->GOARCH=amd64 操作系统: Windows ->GOOS=窗口Linux ->GOOS=linuxOS X ->GOOS=达尔文FreeBSD -> ..
发布时间:2021-11-26 14:23:20 服务器开发

CentOS 64 位错误的 ELF 解释器

我刚刚安装了 CentOS 6 64 位版本,我正在尝试在 64 位机器上安装 32 位应用程序并收到此错误: /lib/ld-linux.so.2: 错误的 ELF 解释器:没有那个文件或目录 我是 Linux 新手.我该如何解决? 解决方案 您使用的是 64 位系统,并且没有安装 32 位库支持. 安装(基线)对 32 位可执行文件的支持 (如果您在设置中不使用 ..
发布时间:2021-11-24 23:26:57 服务器开发

如何使用 go1.6.2 为 linux 32 位构建

是否可以设置 GOARCH 和 GOOS 值的任何组合以构建 ELF 32 位二进制文​​件? 解决方案 GOOS=linux 和 GOARCH=386. 更多示例:架构: 32 位 ->GOARCH=38664 位 ->GOARCH=amd64 操作系统: Windows ->GOOS=窗口Linux ->GOOS=linuxOS X ->GOOS=达尔文FreeBSD -> ..
发布时间:2021-11-24 23:07:49 服务器开发

在 aarch64 上运行 32 位精灵

我已经在 qemu 64 位 ARM 上安装了 Debian (遵循本教程) uname -a Linux 测试 4.9.0-7-arm64 #1 SMP Debian 4.9.110-1 (2018-07-05) aarch64 GNU/Linux 我正在尝试在其上运行 32 位 elf 文件,但有些工作不能: bash: ./file_2: 无法执行二进制文件:Exec 格式错 ..
发布时间:2021-11-17 22:45:46 其他开发

Linux 内核模块作弊 - Qemu Baremetal Xilinx Zynq A9

我的目标是模拟 Zynq-7000 上的 ARM A9 处理器,运行裸机软件.我为此尝试了 2 种不同的方法,但都遇到了障碍.任何有关如何进行的建议将不胜感激. StackOverflow 上的当前答案: 如何制作裸机 ARM 程序并在 QEMU 上运行它们? 链接到 Linux 内核模块作弊 (LKMC, 使用 v3.0) 使用 ./build --arch arm qem ..
发布时间:2021-11-17 22:39:15 其他开发

当 VMA != LMA 时加载 ELF

我有这个问题.我使用 ARM Cortex-A9 和 DS-5 来创建裸机固件.我修改了我的链接器文件,故意将 .data 部分 LMA 与 text 和 Rodata 部分相邻,因为它的默认运行时 VMA 位于 1MB 之外,而 .bin 图像大约为 1MB,但包含 90% 的零.所以我特意制作了 LMA != VMA 以节省空间.我还在 start.S 中添加了一段代码,用于将 .data 部 ..
发布时间:2021-11-17 22:27:00 其他开发