C++符号清洗、Swift符号清洗, 编译还原

C++ 符号清洗(编译还原)

C++ 由于函数重载的原因,针对每个函数符号,假如了name mangling的机制。导致堆栈适合机制阅读,因为每个函数符号都是独一无二的,但是这并非程序员易读的文字。

比如我们有这个符号crash堆栈。
片段如下:

15  QtCore                          0x000000010af3fc54 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent + 292
16  QtWidgets                       0x000000010923bd7c _ZN19QApplicationPrivate14setFocusWidgetEP7QWidgetN2Qt11FocusReasonE + 396
17  QtWidgets                       0x0000000109282af0 _ZN7QWidget8setFocusEN2Qt11FocusReasonE + 580
18  QtWidgets                       0x000000010923cbd4 _ZN19QApplicationPrivate15setActiveWindowEP7QWidget + 1012
19  QtWidgets                       0x000000010923cfc8 _ZN19QApplicationPrivate24notifyActiveWindowChangeEP7QWindow + 52

看着很别扭, 这时我们可以使用命令c++filt -n <name> 将其还原成 易读的 符号文字:

$ c++filt -n _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent
QCoreApplication::notifyInternal2(QObject*, QEvent*)

可以看出 _ZN16QCoreApplication15notifyInternal2EP7QObjectP6QEvent --> QCoreApplication::notifyInternal2(QObject*, QEvent*)

Swift 符号清洗

Swift 同 C++的原理有点像,据说name mangling 就是借用了 c++的原理。
wwdc的图片
命令 xcrun swift-demangle <name>

$ xcrun swift-demangle \$s12MagicNumbers13numberChoicesSaySiGyF
$s12MagicNumbers13numberChoicesSaySiGyF ---> MagicNumbers.numberChoices() -> [Swift.Int]

清洗后:
wwdc的图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

又一AI工具开源!企业应该如何搭上这趟AI快车

大模型技术在近两年来飞速发展&#xff0c;企业对大模型的认知更加理性、务实。大模型本身不会直接产生价值&#xff0c;但在大模型基础架构之上开发出的AI应用&#xff0c;带来技术创新及业务增长&#xff0c;成为企业真正关心的问题。 基于大模型开发的又一个AI工具诞生&…

XenCenter 2024 导入虚拟机

导入虚拟机 虚拟机位置 导入到那一个服务器 导入虚拟机存放存储位置 虚拟机网卡配置 SR修复功能&#xff0c;看自己需求 虚拟机恢复确认最终配置 恢复好的虚拟机 虚拟机模板转换

源浩流体设备与您相约2024年第13届生物发酵展

参展企业介绍 温州源浩流体设备科技有限公司是一家集设计、开发、制造、销售、服务于一体的高科技企业&#xff0c;公司主要生产各种不锈钢阀门、管件、卫生级流体设备(卫生级换向阀,卫生级减压阀,卫生级罐底阀)等。现为温州市泵阀协会会员&#xff0c;ISO9000 2008版质量质量…

视频号视频下载小程序,让你随心保存你喜爱的视频!

今天给大家推荐一个非常实用的小程序&#xff0c;它就是专为下载视频号视频而设计的&#xff01; 微信视频号的兴起&#xff0c;让越来越多的优质、有趣的视频在平台上涌现&#xff0c;我们经常会遇到一些想要保存、回看的视频&#xff0c;但却无法轻易下载到手机或电脑中。这…

Linux基础篇:操作系统进程的基本概念与进程管理基础操作

Linux基础篇&#xff1a;操作系统进程的基本概念与进程管理基础操作 进程的定义&#xff1a; 进程是计算机系统中正在运行的程序的实例。 每个进程都有自己的内存空间、执行状态、资源和上下文。 进程是操作系统进行资源分配和调度的基本单位。 进程描述&#xff1a; 每个进…

LeetCode 63. 不同路径 II

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到右下角…

华为CCE部署RabbitMQ中间件操作文档

1、创建有状态&#xff08;StatefulSet&#xff09;部署 中间件一般为有状态部署&#xff0c;有状态部署与无状态部署区别参考文档&#xff1a;K8S有无状态部署-CSDN博客 1.1、基本信息 注意&#xff1a; 应用名称命名规则&#xff1a;&#xff08;命名规则最好统一&#xff…

深入理解npm常用命令

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的包管理工具&#xff0c;用于管理 Node.js 应用程序的依赖包。除了安装、更新和卸载依赖包外&#xff0c;npm 还提供了许多其他功能&#xff0c;如初始化项目、运行脚本、查看依赖树等。本文将详细介绍一些常用的 …

设计模式-行为型-中介者模式-Mediator

同事抽象类 public abstract class Colleague {private Mediator mediator;public abstract void play(String data); } 视频同事 public class AudioColleague extends Colleague {public void play(String data) {System.out.println("画外音是&#xff1a;" d…

GrayLog日志平台的基本使用-接入jumpserver

1、jumpserver3.8.0部署 Docker 环境准备 # 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 替换Docker 安装源为清华大学镜像站 sed -i sh…

Linux-3 yum和vim

目录 本节目标&#xff1a; Linux 软件包管理器 yum 什么是软件包 1.yum是什么&#xff1f;软件包&#xff1f; 2.Linux(centos)的生态 3.yum的相关操作 我怎么知道我应该安装什么软件&#xff1f; 4.yum的本地配置 关于 rzsz 查看软件包 Linux编辑器-vim使用 1.v…

在电脑上怎么把视频做成二维码?视频生码的方法及步骤

在电脑上怎么把视频做成二维码呢&#xff1f;现在将视频存入二维码之后&#xff0c;将二维码分享或者打印出来&#xff0c;用这种方式来分享或者传递视频对比传统方式会更加的方便快捷。无需占用接收者的内存&#xff0c;手机扫码调取云端储存的视频&#xff0c;消耗视频流量来…

python 成员方法的区别是什么

Python的静态方法和类成员方法都可以被类或实例访问&#xff0c;两者概念不容易理清&#xff0c;但还是有区别的&#xff1a; 1&#xff09;静态方法无需传入self参数&#xff0c;类成员方法需传入代表本类的cls参数&#xff1b; 2&#xff09;从第1条&#xff0c;静态方法是…

redis集群搭建过程遇到的坑

在上一篇博文中搭建好了redis集群&#xff0c;但是仍然存在很多问题 上一篇&#xff1a;k8s下搭建redis集群 1、springboot服务连接 集群配置好了&#xff0c;spring服务应该怎么连接呢&#xff1f;单点和集群的连接配置写法是不一样的 单点 spring:redis:host: ${BTC_RED…

数控加工4轴初探

4轴加工之前一直觉得很神秘&#xff0c;最近画了些时间研究了一下&#xff0c;做过之后发现起始也不是特别复杂。 图中是两步&#xff0c;一步是粗开&#xff0c;已不是用指形铣刀精加工螺旋槽。

Unity Mesh 生成图形(二)

一、概述 Unity 的 Mesh 是用于表示三维物体的网格数据结构。它是由一系列顶点和三角形组成的网格&#xff0c;用于描述物体的形状和外观。 Mesh 是由顶点、三角形和其他相关信息组成的&#xff0c;它用于在 Unity 中创建和渲染三维对象。顶点是网格的基本构建单元&#xff0…

Xen Server 8 Install

Xen Sevrer 前言 XenServer&#xff08;以前称为 Citrix Hypervisor&#xff09;是业界领先的平台&#xff0c;实现了经济高效的桌面、服务器和云虚拟化基础结构。XenServer 支持任意规模或类型的组织整合计算资源&#xff0c;以及将计算资源转换为虚拟工作负载&#xff0c;从…

YOLOv7原创独家改进: 小目标 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 2024年4月最新成果

💡💡💡本文独家改进:CAMixingBlock更好的提取全局上下文信息和局部特征,包括两个部分:卷积-注意融合模块和多尺度前馈网络; 💡💡💡红外小目标实现涨点,只有几个像素的小目标识别率提升明显 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特…

Java NIO Selector选择器源码分析

文章目录 前言Selector类结构Selector抽象类AbstractSelectorSelectorImplWindowsSelectorImpl三种SelectionKey集合 前言 Java NIO&#xff08;New I/O&#xff09;的Selector选择器是一个用于多路复用&#xff08;Multiplexing&#xff09;的I/O操作的关键组件。它允许一个单…

JVM基础篇

初识JVM Java虚拟机的组成 字节码文件 i与1 javap ideajclasslib arthas(线上运行的)