草庐IT

Riscv-elf

全部标签

c - 将代码/符号修补到动态链接的 ELF 二进制文件中

假设我有一个动态链接的ELF二进制文件,我想覆盖/重定向某些库调用。我知道我可以使用LD_PRELOAD来做到这一点,但我想要一个在二进制文件中永久存在、独立于环境并且适用于setuid/setgid二进制文件的解决方案,LD_PRELOAD可以实现。我想做的是从其他目标文件中添加代码(如果需要,可能在新的部分中)并将这些目标文件中的符号添加到二进制文件的符号表中,以便使用新添加的代码版本代替共享库代码。我相信这应该是可能的,而无需在现有代码中实际执行任何重定位;即使它们在同一个文件中,它们也应该能够在运行时以通常的PLT方式解析(对于它的值(value),我只关心函数,而不关心数据)

c - 将代码/符号修补到动态链接的 ELF 二进制文件中

假设我有一个动态链接的ELF二进制文件,我想覆盖/重定向某些库调用。我知道我可以使用LD_PRELOAD来做到这一点,但我想要一个在二进制文件中永久存在、独立于环境并且适用于setuid/setgid二进制文件的解决方案,LD_PRELOAD可以实现。我想做的是从其他目标文件中添加代码(如果需要,可能在新的部分中)并将这些目标文件中的符号添加到二进制文件的符号表中,以便使用新添加的代码版本代替共享库代码。我相信这应该是可能的,而无需在现有代码中实际执行任何重定位;即使它们在同一个文件中,它们也应该能够在运行时以通常的PLT方式解析(对于它的值(value),我只关心函数,而不关心数据)

linux - Mach-O在ELF/linux中的二级命名空间符号解析

有人知道ELF/linux中与Mach-O的两级namespace符号解析等效的方法吗?我想要链接到lib+sym而不是sym的代码。我正在尝试做最能被描述为通常是JIT编译的预编译。我想获得符号的编译时绑定(bind),这通常由dlopen/dlsym完成。但是,可能会发生冲突,dlopen/dlsym可以很好地避免这种情况。似乎ELF实际上缺少这个,并且有VERSION的东西,但是任何解决方法或建议将不胜感激。 最佳答案 没有ELF等价物(通常不需要)。 关于linux-Mach-O

linux - Mach-O在ELF/linux中的二级命名空间符号解析

有人知道ELF/linux中与Mach-O的两级namespace符号解析等效的方法吗?我想要链接到lib+sym而不是sym的代码。我正在尝试做最能被描述为通常是JIT编译的预编译。我想获得符号的编译时绑定(bind),这通常由dlopen/dlsym完成。但是,可能会发生冲突,dlopen/dlsym可以很好地避免这种情况。似乎ELF实际上缺少这个,并且有VERSION的东西,但是任何解决方法或建议将不胜感激。 最佳答案 没有ELF等价物(通常不需要)。 关于linux-Mach-O

linux - ELF文件头

一个关于elf文件头的快速问题,我似乎找不到任何关于如何在elf头中添加/更改字段的有用信息。我希望能够更改魔数(MagicNumber)并将构建日期添加到标题中,可能还有一些其他内容。据我所知,链接器会创建header信息,但我在LD脚本中没有看到任何引用它的内容(尽管我是ld脚本的新手)。我正在使用gcc并为ARM构建。谢谢!更新:好吧,也许我的第一个问题应该是:是否可以在链接时创建/编辑头文件? 最佳答案 我不知道可以执行此操作的链接描述文件命令,但您可以使用objcopy命令在链接后执行此操作。--add-section选项

linux - ELF文件头

一个关于elf文件头的快速问题,我似乎找不到任何关于如何在elf头中添加/更改字段的有用信息。我希望能够更改魔数(MagicNumber)并将构建日期添加到标题中,可能还有一些其他内容。据我所知,链接器会创建header信息,但我在LD脚本中没有看到任何引用它的内容(尽管我是ld脚本的新手)。我正在使用gcc并为ARM构建。谢谢!更新:好吧,也许我的第一个问题应该是:是否可以在链接时创建/编辑头文件? 最佳答案 我不知道可以执行此操作的链接描述文件命令,但您可以使用objcopy命令在链接后执行此操作。--add-section选项

c - 在节头 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=(Elf32_Ehdr*)map_start;secoff=header->e_shoff;section=(Elf32_Shdr*)(map_start+secoff);但是当我这样做的时候:printf("nameoffset=%d\n",(section->sh_

c - 在节头 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=(Elf32_Ehdr*)map_start;secoff=header->e_shoff;section=(Elf32_Shdr*)(map_start+secoff);但是当我这样做的时候:printf("nameoffset=%d\n",(section->sh_

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

只是好奇。显然,这对于实际编程而言不是一个很好的解决方案,但是我说我想在Bless(十六进制编辑器)中创建一个可执行文件。我的体系结构是x86。我可以制作一个非常简单的程序?你好,世界?无限循环?与this问题类似,但在Linux中。 最佳答案 正如我的评论中所提到的,您实际上将为可执行文件编写自己的elf-header,以消除不需要的部分。仍然需要几个部分。Muppetlabs-TinyPrograms上的文档很好地解释了此过程。为了好玩,这里有几个例子:等效于/bin/true(45字节):000000007F454C46010

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

只是好奇。显然,这对于实际编程而言不是一个很好的解决方案,但是我说我想在Bless(十六进制编辑器)中创建一个可执行文件。我的体系结构是x86。我可以制作一个非常简单的程序?你好,世界?无限循环?与this问题类似,但在Linux中。 最佳答案 正如我的评论中所提到的,您实际上将为可执行文件编写自己的elf-header,以消除不需要的部分。仍然需要几个部分。Muppetlabs-TinyPrograms上的文档很好地解释了此过程。为了好玩,这里有几个例子:等效于/bin/true(45字节):000000007F454C46010