elf相关内容

关于 Thumb-2 的 ARM/Thumb 互操作混淆

一段时间以来,我一直在阅读 ARM ISA 相关文档,到目前为止,我相信我对 ARM/Thumb 互操作的基础知识有了很好的理解.我将快速总结如下: 指令可以是 4 字节对齐 (ARM) 或 2 字节对齐 (Thumb). Thumb 和 ARM 指令位于不同的区域,即它们不会在没有显式处理器状态更改的情况下混合. 状态改变可以在执行 bx、blx、ldm、ldr 中的任何一个时发生.在 ..
发布时间:2021-11-17 22:24:29 其他开发

在 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:19:20 其他开发

分析 ELF 二进制文件以最小化其大小

我正在使用 GCC 将 V8 项目交叉编译到嵌入式 ARM 目标arm-gnueabi 交叉编译器.我成功地交叉编译了 V8 库本身,作为冒烟测试,我想将它链接到 Google 的 hello world 示例并在 ARM 板上运行. 库本身的时钟超过 1.2 MB: v8 % find out/arm.release/obj.target/-name '*.a' -exec du -h ..
发布时间:2021-11-17 22:17:52 其他开发

将 ELF 文件加载到内存中

我正在尝试将一个 elf 文件放入内存然后执行它,步骤如下: 1- 放入内存的文件 int main(){printf("你好世界!\n");返回0;} 2- 编译 gcc -o hello hello.c -static ELF 标题:魔法:7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00类别:ELF32数据:2 的补码,小端版本:1(当 ..
发布时间:2021-11-17 22:09:42 其他开发

CPU 相关代码:如何避免函数指针?

我为多个 CPU 编写了性能关键代码.我在运行时检测 CPU,并基于此为检测到的 CPU 使用适当的函数.所以,现在我必须使用函数指针并使用这些函数指针调用函数: void do_something_neon(void);void do_something_armv6(void);void (*do_something)(void);如果(CPU == 霓虹灯){do_something = d ..
发布时间:2021-11-17 22:09:09 其他开发

从 ARM-GCC 编译的 elf 文件中提取详细的符号信息(结构成员)

我使用 ARM-GCC 4.7.4 为 Cortex-M4 编译代码.对于我们的调试工具,我需要以人类可读的格式(例如 .txt)了解所有变量的名称、类型和地址.地图文件提供了大部分信息,遗憾的是没有提供如下结构内容: typedef struct { float32_t Ref;//输入:参考值float32_t Fdb;//变量:反馈值float32_t 错误;//输入:控制错误float3 ..
发布时间:2021-11-17 22:08:33 其他开发

Linux 用户空间 ELF 加载器

我需要做一件相当不寻常的事情:手动执行一个 elf 可执行文件.IE.将所有部分加载到正确的位置,查询 main() 并调用它(然后进行清理).可执行文件将被静态链接,因此无需链接库.我也控制基地址,所以不用担心可能的冲突. 那么,有没有相关的库? 我找到了 OSKit 和它的 liboskit_exec,但是这个项目似乎从 2002 年就已经死了. 我可以参与项目的一部分(当然 ..
发布时间:2021-11-17 22:05:49 服务器开发

ARM ELF 对象内的函数大小不正确

目标文件的readelf输出: 符号表 '.symtab' 包含 15 个条目:Num:值大小类型绑定可见性 Ndx 名称0: 00000000 0 NOTYPE 本地默认值1: 00000000 0 文件本地默认 ABS fp16.c2: 00000000 0 部分本地默认值 13: 00000000 0 部分本地默认值 34: 00000000 0 部分本地默认值 45: 00000000 ..
发布时间:2021-11-17 22:03:19 其他开发

ARM ELF 对象内的函数大小不正确

目标文件的readelf输出: 符号表 '.symtab' 包含 15 个条目:Num:值大小类型绑定可见性 Ndx 名称0: 00000000 0 NOTYPE 本地默认值1: 00000000 0 文件本地默认 ABS fp16.c2: 00000000 0 部分本地默认值 13: 00000000 0 部分本地默认值 34: 00000000 0 部分本地默认值 45: 00000000 ..
发布时间:2021-11-17 22:03:15 其他开发

apcs-gnu ABI 中的结构布局

对于此代码: struct S { unsigned char ch[2];};int main(void){_Static_assert( sizeof(struct S) == 2, "size 不是 2");} 将 GCC(各种版本)与 ABI apcs-gnu(又名 OABI 或 EABI 版本 0)一起用于 ARM,我得到断言失败.原来结构体的大小是4. 我可以通过使用 __a ..
发布时间:2021-11-17 22:02:19 其他开发

如何重命名 arm elf .so 文件中的动态符号?

我需要在 Android APK 中修改一个 so.任务是重命名so中的动态符号(即函数名). 例如,从 Java_com_example_abc_.... 更改为 Java_com_yahoo_zzz_.... 我尝试用WinHex直接搜索替换文本词,apk启动报错.好像.hash 部分也需要更新,但是我不知道如何更新.hash 部分. 我的问题是重命名动态符号的正确或优选方法 ..
发布时间:2021-11-17 21:46:02 移动开发

ELF 文件和 bin 文件有什么区别?

编译器生成的最终镜像包含bin文件和扩展加载器格式的ELf文件,两者有什么区别,特别是ELF文件的实用性. 解决方案 Bin 文件是一个纯二进制文件,没有内存修复或重定位,它很可能具有在特定内存地址加载的显式指令.而.... ELF 文件是可执行链接格式,由符号查找和可重定位表组成,也就是说,它可以被内核加载到任何内存地址,并且所有使用的符号都会自动调整到它被加载到的内存地址的偏移量 ..
发布时间:2021-11-17 21:42:04 其他开发

如何重命名 arm elf .so 文件中的动态符号?

我需要在 Android APK 中修改一个 so.任务是重命名so中的动态符号(即函数名). 例如,从 Java_com_example_abc_.... 更改为 Java_com_yahoo_zzz_.... 我尝试用WinHex直接搜索替换文字,apk启动报错.好像 .hash 部分也需要更新,但是我不知道如何更新 .hash 部分. 我的问题是重命名动态符号的正确或优选方 ..
发布时间:2021-11-15 21:26:18 移动开发

链接elf应用程序和共享库时选择导出的符号

当链接一个elf应用程序或共享库时,我想选择要导出的符号.默认情况下,链接应用程序时不导出任何功能符号,而链接共享库时则导出所有功能符号.有什么方法可以控制要导出的符号?链接应用程序时,我可以使用 -rdynamic 或 -Wl,-export-dynamic 来获取所有符号,并且我可以使用 -Wl,-动态列表 来仅获取一些符号.但是,在链接库时,这些选项会被忽略吗? 解 ..
发布时间:2021-05-29 21:26:04 其他开发

了解nostdlib C程序的ELF二进制大小

我使用的是Ubuntu 20.04, gcc 9.3.0, ld 2.34.我有一个简单的hello world程序,它不使用 glibc 或任何其他库,而仅使用write syscall.尽管如此,我的二进制文件大小仍约为8Kb.我不确定为什么这么大而不说1Kb. C程序: intx64_syscall_write(int fd,char const * data,unsigned l ..
发布时间:2021-05-29 20:05:27 其他开发

在elf文件的notes部分中修改build-id

我需要在ELF文件的notes部分中修改build-id.我看到有很多工具可以读取elf,但不能对其进行修改.我发现了 elfedit ,但它似乎并没有满足我的需要.甚至有可能吗? 这是 readelf 的输出 $ readelf -n myelffile显示在以下位置找到的注释:.note.ABI-tag所有者数据大小说明GNU 0x00000010 NT_GNU_ABI_TAG(A ..
发布时间:2021-05-04 18:31:37 其他开发

汇编节.code和.text的行为不同

我是汇编语言的新手,从中学到的 .code 与 .text 相同,但是下面的代码将使用 .code崩溃. segment .datamsg db"hello,world",0xalen equ $-味精.text部分全局_start_开始:mov edx,lenmov ecx,味精mov ebx,1mov eax,4整数0x80mov ebx,0mov eax,1整数0x80 nasm ..
发布时间:2021-05-04 18:31:34 其他开发