热门标签 | 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关联的符号(因为在动态链接时需要使用它们进行绑定,并且反汇编器可能会回退缺少符号表时使用该信息)。通常,反汇编程序从一个地址开始向后工作,直到找到以符号命名的地址为止,并假定(此处错误地)该被反汇编的地址是该函数的一部分。


推荐阅读
  • 本文详细介绍如何在 Windows 环境下安装 Ubuntu 12.04 版本的 Linux 操作系统,包括必要的软件下载、配置步骤以及注意事项。 ... [详细]
  • 随着技术社区的发展,越来越多的技术爱好者选择通过撰写博客来分享自己的学习经验和项目进展。本文将介绍一个具体案例,即将一套原本运行于Windows平台的代码成功移植到Linux(Redhat)环境下的过程与挑战。 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • C语言实现推箱子游戏的完整代码
    本文详细介绍了如何使用C语言在Linux环境下实现一个简单的推箱子游戏,包括游戏的基本规则、地图设计及代码实现。适合C语言初学者学习。 ... [详细]
  • 在安装Ubuntu 12.10并尝试安装VMware Tools时,遇到了一个常见的错误提示:指定的路径不是有效的3.5.0-17-generic内核头文件路径。本文将提供解决这一问题的具体步骤。 ... [详细]
  • 如何在Linux中实现字符设备控制
    本文详细探讨了在Linux环境下控制字符设备的方法,包括蜂鸣器和模数转换器(ADC)的实际操作案例。对于开发者来说,了解这些基础知识对于嵌入式系统的开发尤为重要。 ... [详细]
  • iTOP4412开发板QtE5.7源码编译指南
    本文详细介绍了如何在iTOP4412开发板上编译QtE5.7源码,包括所需文件的位置、编译器设置、触摸库编译以及QtE5.7的完整编译流程。 ... [详细]
  • CentOS 转向引发争议,联合创始人推出 Rocky Linux
    CentOS 转向 CentOS Stream 引发用户不满,其联合创始人 Gregory Kurtzer 推出新的社区项目 Rocky Linux,旨在延续 CentOS 的精神。 ... [详细]
  • 在树莓派Ubuntu(ARM64)上安装Node.js
    本文详细介绍了如何在树莓派Ubuntu系统(ARM64架构)上安装Node.js,包括下载、解压、移动文件以及创建软链接等步骤。 ... [详细]
  • Linux环境下Git安装及常见问题解析
    本文详细介绍了在Ubuntu系统中安装Git的过程,包括环境检查、软件安装、用户配置以及SSH密钥生成等步骤,并针对安装过程中可能出现的问题提供了有效的解决方案。 ... [详细]
  • PHP 中 preg_match 函数的 isU 修饰符详解
    本文详细解析 PHP 中 preg_match 函数中 isU 修饰符的具体含义及其应用场景,帮助开发者更好地理解和使用正则表达式。 ... [详细]
  • 前端开发中的代码注释实践与规范
    本文探讨了前端开发过程中代码注释的重要性,不仅有助于个人清晰地回顾自己的编程思路,还能促进团队成员之间的有效沟通。文章将详细介绍HTML、CSS及JavaScript中的注释使用方法,并提出一套实用的注释规范。 ... [详细]
  • Ubuntu下系统负载与程序状态的监控方法
    本文介绍了在Ubuntu操作系统中,通过不同工具来监控系统负载及程序运行状态的方法。包括文本模式下的top和htop,图形界面下的gnome-system-monitor,以及针对NVIDIA Jetson开发板的jetson-stats工具。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统中使用 APT-GET 包管理器安装 MySQL 5.7 数据库的过程,并对安装后的文件和目录结构进行了说明,包括重要的配置文件及其功能。 ... [详细]
  • 随着EOS主网的成功启动,众多开发者和投资者对其给予了高度关注。本文旨在介绍如何构建EOS开发环境,包括所需的基本硬件配置、软件安装步骤以及常见问题的解决方案。 ... [详细]
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社区 版权所有