为何GCC链接器修改汇编指令?程序出现核心转储异常
程序频繁CoreDump:静态目标文件指令被链接器异常修改的问题
我的程序频繁触发核心转储(CoreDump),使用objdump查看汇编代码后发现,静态目标文件中的drv_attach方法被GCC链接器修改:目标文件中的push指令在可执行文件中变为addr32 call指令,具体对比如下:
静态目标文件中drv_attach的汇编代码
00000000000004d0 <drv_attach>: 4d0: 55 push %rbp 4d1: 48 89 e5 mov %rsp,%rbp 4d4: 41 57 push %r15 ... 895: 4c 8d 4b 18 lea 0x18(%rbx),%r9 899: 29 fe sub %edi,%esi 89b: ff 35 00 00 00 00 push 0x0(%rip) # 此处为push指令 8a1: 49 8d 92 08 03 00 00 lea 0x308(%r10),%rdx 8a8: 4c 8b 85 a8 fc ff ff mov -0x358(%rbp),%r8
可执行文件中drv_attach的汇编代码
00000000004bbb40 <drv_attach>: 4bbb40: 55 push %rbp 4bbb41: 48 89 e5 mov %rsp,%rbp 4bbb44: 41 57 push %r15 ... 4bbf05: 4c 8d 4b 18 lea 0x18(%rbx),%r9 4bbf09: 29 fe sub %edi,%esi 4bbf0b: 67 e8 8e 23 04 00 addr32 call 4fe29f <com_dlsym> # 此处变成了call指令 4bbf11: 49 8d 92 08 03 00 00 lea 0x308(%r10),%rdx 4bbf18: 4c 8b 85 a8 fc ff ff mov -0x358(%rbp),%r8
奇怪的是,该问题仅在部分机器上出现,测试GCC 4.8.5和GCC 11.3版本均存在此问题。
内容的提问来源于stack exchange,提问作者Zippon
相关产品推荐
相关产品推荐

