热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

剥离的二进制文件显示“_cxa_finalize”而不是“libc_start_main”

如何解决《剥离的二进制文件显示“_cxa_finalize”而不是“libc_start_main”》经验,为你挑选了1个好方法。

为什么要剥离二进制显示_cxa_finalize而不是libc_start_main

我正在尝试main()在Linux(Ubuntu)上的一个非常简单的C程序中查找和反汇编。二进制文件被剥离。在下面,您可以看到相同说明的拆卸(未剥离)与拆卸(剥离)。

问题:_cxa_finalize剥离版本中包含什么?为什么libc_start_main被替换_cxa_finalize

不剥离:

106d:   48 8d 3d c1 00 00 00    lea    rdi,[rip+0xc1]        # 1135 
1074: ff 15 66 2f 00 00 call QWORD PTR [rip+0x2f66] # 3fe0 <__libc_start_main@GLIBC_2.2.5>

剥离:

106d:   48 8d 3d c1 00 00 00    lea    rdi,[rip+0xc1]        # 1135 <__cxa_finalize@plt+0xf5>

1074:   ff 15 66 2f 00 00       call   QWORD PTR [rip+0x2f66]        # 3fe0 <__cxa_finalize@plt+0x2fa0>

R.... 5

不是__cxa_finalize。是__cxa_finalize@plt+0xf5__cxa_finalize@plt+0x2fa0(请注意明显的偏移量)。反汇编器没有有关符号的信息,main或者__libc_start_main因为您删除了符号表,但是由于技术原因,它仍然知道与PLT thunk关联的符号(因为在动态链接时需要使用它们进行绑定,并且反汇编器可能会回退缺少符号表时使用该信息)。通常,反汇编程序从一个地址开始向后工作,直到找到以符号命名的地址为止,并假定(此处错误地)该被反汇编的地址是该函数的一部分。



1> R....:

不是__cxa_finalize。是__cxa_finalize@plt+0xf5__cxa_finalize@plt+0x2fa0(请注意明显的偏移量)。反汇编器没有有关符号的信息,main或者__libc_start_main因为您删除了符号表,但是由于技术原因,它仍然知道与PLT thunk关联的符号(因为在动态链接时需要使用它们进行绑定,并且反汇编器可能会回退缺少符号表时使用该信息)。通常,反汇编程序从一个地址开始向后工作,直到找到以符号命名的地址为止,并假定(此处错误地)该被反汇编的地址是该函数的一部分。


推荐阅读
author-avatar
上官邱老
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有