elf相关内容

如何使用objcopy或libelf将elf文件的一部分替换为另一部分,以使其确实加载到内存中?

我有一个项目,我需要删除ELF文件的一部分并将其替换为内容稍有修改的另一部分.我能够先删除原始部分,然后使用objcopy添加所需的部分.但我总是得到以下警告: 警告:分配的节".nv_fatbin"不在段中 这将导致该节未加载到内存中,因此无法实现所需的功能. 将其添加并重新添加到细分中的最佳方法是什么? libelf?还是可以使用objcopy来实现? 解决方案 您可 ..
发布时间:2021-05-04 18:31:31 其他开发

是否可以链接可执行文件中的.symtab表符号?

在main.c下面给出: #include无效测试(){printf("test()\ n");}int main(){测试();返回0;} 执行以下命令: clang-10 main.c -o mainreadelf -s主 插入输出复制到此处: 符号表'.dynsym'包含4个条目:... 忽略 ...符号表".symtab"包含62个条目:数值:值大小类 ..
发布时间:2021-05-04 18:31:24 其他开发

启动期间生成的ELF可执行段错误

我正在生成一个ELF可执行文件,并将.text节加载到LOAD段中.它可以很好地反汇编,但是尝试在 gdb 下运行它会给出在启动程序期间因信号SIGSEGV终止,出现分段错误. readelf 给出: ELF标头:魔术:7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 00类别:ELF64数据:2的补码,小尾数版本:1(当前)OS/ABI:U ..
发布时间:2021-05-04 18:31:18 其他开发

是否可以链接到共享库而不访问库本身?

我拥有共享库的头文件,但没有共享库或其源代码. 我仍然可以针对该库编译一些代码吗? 如果没有,则共享库包含哪些信息而不包含在标头中? 解决方案 我仍然可以针对该库编译一些代码吗? 编译:是的.链接:也许吧. 您可以创建一个虚拟库进行链接.例如.如果标题包含: int library_func(void *); 然后: //dummy_lib.cint ..
发布时间:2021-05-04 18:31:15 服务器开发

ELF在其他过程存储器中读/写

是否有等效的ReadProcessMemory窗口函数用于在另一个过程存储器中进行读取(或写入)?我试图预加载共享库,也尝试调试(ptrace,peek和poke内存).似乎可行,但我想知道是否没有最简单的方法... 解决方案 是否有等效的ReadProcessMemory 是:人ptrace ( PTRACE_PEEKDATA 等) ptrace 接口是UNIX通用的,与 ..
发布时间:2021-05-04 18:31:12 其他开发

.text与.data所需的对齐方式

我一直在玩弄 ELFIO 库.其中一个示例,在特别是,允许​​从头开始创建ELF文件-定义节,段,入口点,并为相关节提供二进制内容. 我注意到,一个程序中创建这样的段错误时选择代码段对准小于页尺寸(0×1000): //创建一个可加载的段segment * text_seg = writer.segments.add();text_seg-> set_type(PT_LOAD);text_ ..
发布时间:2021-05-04 18:31:09 服务器开发

如何编译ELF二进制文件以便可以将其作为动态库加载?

这是理论问题.我知道,也许最佳实践是使用共享库.但是我遇到了这个问题,似乎无法在任何地方找到答案. 如何构造代码并以ELF格式编译C/C ++程序,以便可以使用 dlopen()加载该程序? 例如,如果一个可执行文件包含某些函数 int test()的实现,而我想从程序中调用此函数(最好获取函数的结果),即使有可能,我该怎么做呢? 我可以用伪代码描述如下: ELF可执行文件 ..
发布时间:2021-05-04 18:31:06 服务器开发

如何查看共享库加载的顺序

鉴于ELF二进制或共享库,我如何最轻松地查看所需共享库的加载顺序? 它们是否按照 readelf -d 列出的顺序加载? 解决方案 如何最轻松地查看所需共享库的加载顺序? 使用 LD_DEBUG : LD_DEBUG =文件/bin/ls13444:13444:file = libc.so.6 [0];谁需要[0]...13444:file = libnss_files ..
发布时间:2021-05-04 18:31:03 其他开发

C启动代码是否更改数据地址

就使用C代码进行嵌入式开发而言,我了解到,在编译和链接程序时,会生成在目标计算机上执行的二进制或ELF文件.ELF文件将包含(以及许多其他东西)全局变量的地址或地址偏移量. 现在,当要在整个启动程序中修改C启动代码时,它可以将非常量数据/变量从闪存复制到RAM中. 然后将更改系统上变量的内存地址吗?这样是否会更新ELF文件以更改此数据的地址? 解决方案 注意:以下内容描述了独立 ..
发布时间:2021-05-04 18:31:00 其他开发

什么是__libc_start_main和_start?

过去几天,我一直在尝试了解执行C程序时幕后发生的事情.但是,即使阅读了许多文章,我也无法找到详细而准确的解释.有人可以帮我吗? 解决方案 在编译和链接程序时,通常会找到这样的特殊名称以用于特定用途. 通常,像 _start 这样的东西将是可执行文件的 actual 入口点,它将位于某个目标文件或库中(例如可能包括以下内容: 设置静态数据(应该初始化为零,因此它可能只是一块内存的 ..
发布时间:2021-05-04 18:30:57 服务器开发

静态库(.a)和共享库(.so)之间的文件格式差异?

我知道关于共享库和静态库的用例有很多问题,这个问题与之无关.我问的是磁盘上存储的文件格式的差异. 为什么问题是,两者之间有什么区别?还是它们完全相同,只是用法不同? 我被认为是不一样的,因为在共享库上运行'nm'需要-D标志.显然,它需要做一些不同的事情.为什么? 它们都是ELF文件吗? 共享库可以包含一些依赖路径是唯一的区别吗? 解决方案 静态库,例如 libfo ..
发布时间:2021-05-04 18:30:52 服务器开发

如何手动加载和执行ELF二进制可执行文件?

假设二进制文件是PIC,如何将其加载到内存中并执行入口点?我这样做是为了熟悉ELF,因此不允许 execve . 解决方案 以下是基本步骤: 阅读程序标题以找到LOAD指令,并确定所需的映射总长度(以页为单位). 将最低地址的LOAD指令与总长度(可能大于文件长度)映射,让 mmap 为您分配一个地址.这将保留连续的虚拟地址空间. 使用 MAP_FIXED 将刷新的LOAD指令映 ..
发布时间:2021-05-04 18:30:49 其他开发

读取ELF部分的内容(以编程方式)

我正在尝试检索ELF二进制文件中其他部分的内容.此时,我正在使用以下代码来检索每个部分的名称: #include#include#include#include#pragma pack(push,1)#pragma pack(流行音乐)#定义EI_NIDENT 16/* 32位ELF基本类型.*/typede ..
发布时间:2021-05-04 18:30:46 服务器开发

打印节标题的小精灵名称

我有一个C程序,我想在其中打印出输入文件的节头的名称.我根据研究ELF表示法制作了所有内容,并帮助了Internet上的现有程序,但仍然无法正常工作.它仅打印来自for循环的索引,该索引也应为节名称.有人看到我想念的东西吗? 更新:我更新了代码,并删除了以后可能有人需要它的情况,该错误会导致堆栈溢出. 代码: #include#include ..
发布时间:2021-05-04 18:30:43 服务器开发

在Linux上编译和链接不同版本的gcc

我计划使用gcc 4.7.1编译静态库(mylib.a).我想利用C ++ 11的优势,因此使用-std = c ++ 11.我在其中编译该lib的平台是带有glibc-2.8的x86_64 SLES 11. 然后,我想使用旧版代码将旧版平台上的此静态库链接,因此我必须使用gcc 4.1.2链接和编译旧版代码.因此,在我的库头文件中,我将不使用任何C ++ 11特定的代码.我还将链接来自gc ..
发布时间:2021-05-04 18:30:40 C/C++开发

我的Linux可执行程序中的段00是什么(64位)

这是一个非常简单的汇编程序,执行后只需返回 12 . $ cat a.asm全局_start.text部分_start:mov rax,60;系统调用退出mov rdi,12岁;退出代码12系统调用 它可以正确构建和执行: $ nasm -f elf64 a.asm&&ld a.o&&./a.out ||回声$?12 但是a.out的大小很大,超过了4k: $ wc -c a. ..
发布时间:2021-05-04 18:30:37 服务器开发

不同ebpf程序类型之间的地图共享

是否可以在不同程序类型之间共享ebpf映射.我需要在tc-bpf程序和cgroup bpf程序之间共享一个映射.如果将映射固定到充当全局名称空间的文件系统,则应该可行.但是,我没有这个工作. 该映射是由tc-bpf程序创建的,并固定到全局名称空间.由于它是tc-bpf程序,因此映射的类型为struct bpf_elf_map.该bpf程序是通过iproute2加载的. 现在,我有一个c ..
发布时间:2021-05-04 18:30:35 其他开发