Relocations in generic ELF (EM: 40)

libtool: link: gcc -shared  -fPIC -DPIC  .libs/libmicrohttpd_la-connection.o .libs/libmicrohttpd_la-reason_phrase.o .libs/libmicrohttpd_la-daemon.o .libs/libmicrohttpd_la-internal.o .libs/libmicrohttpd_la-memorypool.o .libs/libmicrohttpd_la-mhd_mono_clock.o .libs/libmicrohttpd_la-sysfdsetsize.o .libs/libmicrohttpd_la-mhd_str.o .libs/libmicrohttpd_la-mhd_send.o .libs/libmicrohttpd_la-mhd_sockets.o .libs/libmicrohttpd_la-mhd_itc.o .libs/libmicrohttpd_la-mhd_compat.o .libs/libmicrohttpd_la-response.o .libs/libmicrohttpd_la-mhd_threads.o .libs/libmicrohttpd_la-postprocessor.o .libs/libmicrohttpd_la-digestauth.o .libs/libmicrohttpd_la-md5.o .libs/libmicrohttpd_la-sha256.o .libs/libmicrohttpd_la-basicauth.o .libs/libmicrohttpd_la-base64.o   -lpthread  -pthread   -pthread -Wl,-soname -Wl,libmicrohttpd.so.12 -o .libs/libmicrohttpd.so.12.58.0
/usr/bin/ld: .libs/libmicrohttpd_la-connection.o: Relocations in generic ELF (EM: 40)
/usr/bin/ld: .lib

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题涉及到ELF格式文件中的relocation部分。relocation是指在代码执行时需要动态绑定或修改的地址,例如函数调用或全局变量。在ELF文件中,relocation记录了需要修改的地址和修改方式。em:40是指对应的ELF文件所使用的架构为x86-64。 ### 回答2: Relocations in generic ELF(Executable and Linkable Format)是指在编译和链接过程中需要对代码或数据进行修改的操作。这些修改通常是由于跨越链接时不同的内存布局而导致的。 在ELF文件中,每个节(section)都有一个对应的重定位节(relocation section),它记录下了需要修正的地址和修正方式。重定位表(entry)通常包括了被修正的段(section)、修正的地址、修正的类型(relocation type)以及必要的符号信息(symbol information)等。 重定位是在链接时完成的,用于将不同的目标文件中的符号链接到正确的地址。在链接器将所有目标文件链接成一个可执行文件时,需要对每个符号进行重定位。在这个过程中,链接器根据重定位表中的信息计算出被修正的地址和修正方式,并将这些信息保存在可执行文件中,最终得到一个可以在特定的内存位置上运行的可执行文件。 总之,重定位是ELF格式中非常重要的一部分,它确保了可执行文件可以在不同的内存位置上正确运行。了解重定位的机制,可以帮助我们更好地理解可执行文件的链接过程。 ### 回答3: 在 ELF(Executable and Linkable Format)文件中,重定位是指在程序加载时,调整程序的代码和数据的地址的过程。在ELF文件的头部中,有一个字段称为节头表(Section Header Table),它包含了程序的各个部分,如代码、数据、符号表等等。而在重定位中,涉及的主要是代码和数据。每个代码或数据段都是由一个或多个节(Section)组成的,而每个节都描述了它在文件中的位置和在内存中的位置。 重定位的目的是使程序能够正确运行,并能够在任何地址空间中执行。当程序被加载时,操作系统负责找到每个段在内存中的位置,并将其复制到正确的位置。操作系统也修改了代码和数据中的地址,以便它们指向正确的位置。这个过程中,需要发现程序中所有的重定位项(Relocation Entries),并将它们修改为正确的地址。在读取完整个 ELF 文件后,我们可以看到每个节标志(Section Flag)设置中是否包含了 RELA 或 REL(Relocation) 标志。这就意味着 ELF 文件需要进行重定位的节。 重定位项保存在程序的重定位表中。这个表在 ELF 文件的数据段(.data 或 .rdata)中。对于 64 位的 ELF 文件,重定位项的类型是 RELA,包含了重定位节的偏移量、重定位的地址、重定位的类型和重定位的符号。对于 32 位的 ELF 文件,重定位项的类型是 REL,只包含了重定位节的偏移量和重定位的地址。重定位项类型中保存了一个数值,它指示了将要执行的操作和模式。 总之,重定位是 ELF 文件中一个重要的概念。它们允许程序动态地调整其代码和数据在内存中的位置,以便在任何地址空间中执行。重定位项和重定位表则是实现这个过程的工具和手段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值