Swift 逆向工程:Swift 函数名称规则?

2024-03-09

我有一个关于 swift 函数名称规则的问题。当我尝试在 IDA Pro 中分析用 swift 编写的 iOS 应用程序(也许 OS X 也是同样的情况),例如 swift-2048 时,我得到了这样的函数名称:

EXPORT __TFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
__text:00022FAC __TFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
...
__text:00022FCC __TToFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_

第一个和第二个函数名称看起来非常相似。只有一个区别是“TFC”和“TToFC”。有什么不同?我看到一些功能子是不同的:

__text:00022FAC                 EXPORT __TFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
__text:00022FAC __TFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
__text:00022FAC                                         ; DATA XREF: __objc_data:0004A51Co
__text:00022FAC                 STMFD           SP!, {R4,R7,LR}
__text:00022FB0                 MOV             R4, R0
__text:00022FB4                 MOV             R0, R1
__text:00022FB8                 ADD             R7, SP, #4
__text:00022FBC                 BL              _objc_release
__text:00022FC0                 MOV             R0, R4
__text:00022FC4                 LDMFD           SP!, {R4,R7,LR}
__text:00022FC8                 B               _objc_release
__text:00022FC8 ; End of function __TFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
__text:00022FC8
__text:00022FCC
__text:00022FCC ; =============== S U B R O U T I N E =======================================
__text:00022FCC
__text:00022FCC
__text:00022FCC __TToFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_
__text:00022FCC                                         ; DATA XREF: __objc_const:00049A28o
__text:00022FCC                 BX              LR
__text:00022FCC ; End of function __TToFC10swift_204811AppDelegate27applicationWillResignActivefS0_FCSo13UIApplicationT_

但其中一些非常相似:

__text:000230B4                 EXPORT __TFC10swift_204811AppDelegatecfMS0_FT_S0_
__text:000230B4 __TFC10swift_204811AppDelegatecfMS0_FT_S0_
__text:000230B4                                         ; DATA XREF: __objc_data:0004A530o
__text:000230B4
__text:000230B4 var_10          = -0x10
__text:000230B4 var_C           = -0xC
__text:000230B4
__text:000230B4                 STMFD           SP!, {R7,LR}
__text:000230B8                 MOV             R7, SP
__text:000230BC                 SUB             SP, SP, #8
__text:000230C0                 MOV             R1, #(:lower16:(__TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_ - 0x230D4))
__text:000230C4                 MOV             R2, #0
__text:000230C8                 MOVT            R1, #(:upper16:(__TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_ - 0x230D4))
__text:000230CC                 LDR             R1, [PC,R1] ; __TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_
__text:000230D0                 STR             R2, [R0,R1]
__text:000230D4                 STR             R0, [SP,#0x10+var_10]
__text:000230D8                 MOV             R0, #(__TMdC10swift_204811AppDelegate - 0x230E8)
__text:000230E0                 ADD             R0, PC, R0 ; __TMdC10swift_204811AppDelegate
__text:000230E4                 ADD             R0, R0, #8
__text:000230E8                 STR             R0, [SP,#0x10+var_C]
__text:000230EC                 MOV             R1, #(:lower16:(selRef_init - 0x23100))
__text:000230F0                 MOV             R0, SP
__text:000230F4                 MOVT            R1, #(:upper16:(selRef_init - 0x23100))
__text:000230F8                 LDR             R1, [PC,R1] ; selRef_init ; "init"
__text:000230FC                 BL              _objc_msgSendSuper2
__text:00023100                 MOV             SP, R7
__text:00023104                 LDMFD           SP!, {R7,PC}
__text:00023104 ; End of function __TFC10swift_204811AppDelegatecfMS0_FT_S0_
__text:00023104
__text:00023108
__text:00023108 ; =============== S U B R O U T I N E =======================================
__text:00023108
__text:00023108
__text:00023108 __TToFC10swift_204811AppDelegatecfMS0_FT_S0_
__text:00023108                                         ; DATA XREF: __objc_const:00049A64o
__text:00023108
__text:00023108 var_10          = -0x10
__text:00023108 var_C           = -0xC
__text:00023108
__text:00023108                 STMFD           SP!, {R7,LR}
__text:0002310C                 MOV             R7, SP
__text:00023110                 SUB             SP, SP, #8
__text:00023114                 MOV             R1, #(:lower16:(__TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_ - 0x23128))
__text:00023118                 MOV             R2, #0
__text:0002311C                 MOVT            R1, #(:upper16:(__TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_ - 0x23128))
__text:00023120                 LDR             R1, [PC,R1] ; __TWvdvC10swift_204811AppDelegate6windowGSqCSo8UIWindow_
__text:00023124                 STR             R2, [R0,R1]
__text:00023128                 STR             R0, [SP,#0x10+var_10]
__text:0002312C                 MOV             R0, #(__TMdC10swift_204811AppDelegate - 0x2313C)
__text:00023134                 ADD             R0, PC, R0 ; __TMdC10swift_204811AppDelegate
__text:00023138                 ADD             R0, R0, #8
__text:0002313C                 STR             R0, [SP,#0x10+var_C]
__text:00023140                 MOV             R1, #(:lower16:(selRef_init - 0x23154))
__text:00023144                 MOV             R0, SP
__text:00023148                 MOVT            R1, #(:upper16:(selRef_init - 0x23154))
__text:0002314C                 LDR             R1, [PC,R1] ; selRef_init ; "init"
__text:00023150                 BL              _objc_msgSendSuper2
__text:00023154                 MOV             SP, R7
__text:00023158                 LDMFD           SP!, {R7,PC}
__text:00023158 ; End of function __TToFC10swift_204811AppDelegatecfMS0_FT_S0_

斯威夫特正在使用Name Mangling用于方法、类的命名......我遇到了这个其中描述了快速名称修改。关于重整的部分如下所示。


名称修改

Swift 将有关函数(以及更多)的元数据保存在各自的符号中,这称为名称修改。该元数据包括函数的名称(显然)、属性、模块名称、参数类型、返回类型等等。以此为例:

class Shape{
    func numberOfSides() -> Int {
        return 5
    }
}

simpleDescription 方法的损坏名称是_TFC9swifttest5Shape17simpleDescriptionfS0_FT_Si.

详细情况如下:

  • _T – 所有 Swift 符号的前缀。一切都将从此开始。

  • F——函数。

  • C——类的函数。 (方法)

  • 9swifttest – 模块名称,带有前缀长度。

  • 5Shape – 函数所属的类名,同样具有前缀长度。

  • 17simpleDescription – 函数名称。

  • f – 函数属性。在本例中是“f”,它只是一个 功能正常。我们稍后会讲到这一点。

  • S0_FT – 我不太确定这意味着什么,但它似乎标志着 参数的开头和返回类型。

  • ‘_’ – 这个下划线将参数类型与返回值分开 类型。由于该函数不带参数,因此它直接位于 S0_FT。

  • S – 这是返回类型的开头。 “S”代表 迅速;返回类型是 Swift 内置类型。下一个角色 决定类型。

  • i – 这是 Swift 内置类型。小写“I”,代表 国际。


摘自:

看起来实际链接已损坏,请查找镜像here http://www.cnblogs.com/Proteas/p/3782638.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 逆向工程:Swift 函数名称规则? 的相关文章

  • 文档 Main.storyboard 需要 Xcode 8.0 或更高版本

    我下载了 Xcode beta 并打开了现有的项目 看看它如何与 Xcode 8 beta 一起使用 我从 Xcode 8 打开了 Storyboard 文件 现在 当我从 Xcode 7 3 打开项目时 我无法打开故事板文件 它给出了以下
  • 如何使 collectionViewCell 仅按高度自动调整大小?

    我使用collectionView的自动调整流布局的功能 self flow UICollectionViewFlowLayout alloc init self flow scrollDirection UICollectionViewS
  • 当 UIView 通过自动布局调整大小时,会调用什么方法?

    我有一个图像视图 我通过在子类中覆盖以下内容来实现圆角 void setFrame CGRect frame super setFrame frame self layout setCornerRadius frame size width
  • 为什么每次用户启动应用程序时都要注册推送通知?

    在Apple文档中你可以找到下面这句话 应用程序应在每次启动时进行注册 并向其提供者提供当前令牌 它调用 registerForRemoteNotificationTypes 来启动注册过程 因此 当我在应用程序中实现推送通知时 我必须注册
  • 使用 AVFoundation 和 Swift 访问多个音频硬件输出/通道

    如何使用 AVFoundation 访问除 1 2 之外的其他音频硬件输出 我正在为 Mac OS X 应用程序编写快速代码 该应用程序通过各种输出设备 USB 接口 dante soundflower 播放 mp3 文件 如下所示 myP
  • SwiftUI 转义闭包捕获变异的“self”参数

    我有一个可以通过两种方式打开的视图 一个包含提供给它的数据 另一个包含对 Firestore 文档的文档引用 我创建了两个构造函数 在第一个构造函数中我提供数据 在另一个构造函数中我提供文档参考 然后我使用此引用进行网络调用 但出现错误 E
  • swift:移动动画

    我在故事板中有 viewController 还有4个正方形 我想将我的方块放在视图中 首先我想显示两个正方形 如果我按下按钮 我希望我的红色 2 个方块向左移动 然后显示接下来的 2 个蓝色方块 就像这部动画 我需要创建一个scrollV
  • 如何将 UILabel 与个人资料照片图像水平对齐?

    我必须显示名称和电子邮件 ID 与个人资料图像正确水平对齐 这样姓名和电子邮件 ID 就出现在 UIImageView 的中心 但您可以看到姓名和电子邮件 ID 不在个人资料图片的中心 为什么会发生这种情况 我给出了以下限制 删除前导和尾随
  • 如何执行条件segue

    我通过 IB 创建了一个 segue 单击按钮时 将转换到视图 A 在按钮单击操作中 我有performSegue withIdentifier sender 包裹在一个条件中 我希望仅当条件为真时才发生 segue 但是 一旦用户单击按钮
  • 手动屏幕跟踪在 Firebase (iOS) 中不起作用

    我正在尝试禁用 Firebase 中的手动屏幕跟踪 并将其替换为我自己的屏幕跟踪实现 通过自动屏幕跟踪 我发送到 firebase 的每个事件都有两个额外的参数 firebase screen class and firebase scre
  • Swift 每 5 天重复一次 LocalNotification

    如何每 5 天上午 10 00 重复一次 LocalNotification 我尝试这个 但它不起作用 let content UNMutableNotificationContent content title Hello content
  • 自定义“可搜索”搜索字段 SwiftUI iOS 15

    When using the new searchable modifier in SwiftUI on iOS 15 I have no way to customize the Search Bar appearance Specifi
  • 使用 popToRootViewController 时我丢失了导航栏

    我有一个 iOS 应用程序 其中主屏幕是 UICollectionViewController 从集合视图中选择项目时 视图将推送到该项目的详细信息视图 在细节视图中 我构建了一个从侧面移出的抽屉 滑块 为了让视图看起来像我想要的那样 我隐
  • 从 Xcode 6 安装失败:“存在内部 API 错误”

    我尝试在 ipad ios 7 1 2 上运行一个在我的手机 ios 8 4 1 上运行良好的应用程序 Xcode 提示 存在内部 API 错误 仅此而已 我不确定如何解释日志 怎么了 我该如何解决 ipad日志 Aug 29 17 39
  • 如何在 Swift 中将 Int 转换为字符

    我在这里挣扎了十多分钟 失败了 我屈服了 我需要在 Swift 中将 Int 转换为 Character 但无法解决它 Question 你如何转换 cast an Int integer to a Character char 在斯威夫特
  • 在 ios 中从 XMPP 服务器检索存档的消息

    我正在将 XMPP 功能集成到我的 ios 应用程序中 但遇到了一个无法解决的问题 问题是我无法从服务器获取存档的消息 我的客户能够登录 并且我已经成功测试了多个服务调用 发送 接收消息 获取有关用户的信息 发送后
  • 自调整大小的集合视图在 iOS 15 中进入递归循环

    我有一个自动调整大小的集合视图 当我调用 super layoutSubviews 时 我的应用程序崩溃 因为集合视图进入递归更新循环 这在 iOS 14 及更低版本中运行良好 但从 iOS 15 开始就观察到了这一点 class Dyna
  • 从 Xcode iOS 项目运行 swift 脚本作为构建阶段

    这是一个简单的快速脚本 usr bin env xcrun swift import Foundation let task NSTask task launchPath bin echo task arguments farg1 arg2
  • Google Maps iOS SDK:地图上东西点之间的距离

    如何计算地图东点和西点之间的距离 以米为单位 假设用户更改了滚动地图的位置 然后我使用 mapView didChangeCameraPosition delegate 方法捕获移动 但我不知道如何计算距离 这是一个辅助函数 可用于计算两个
  • JavaScript 与 WKWebView 的同步本机通信

    使用 WKWebView 可以在 JavaScript 和 Swift Obj C 本机代码之间进行同步通信吗 这些是我尝试过但失败的方法 方法 1 使用脚本处理程序 WKWebView接收JS消息的新方式是使用委托方法userConten

随机推荐

  • Bootstrap 3 导航栏 - 无法正确折叠

    导航栏曾经正常工作 但我做了一些更改 它不再工作 当我将窗口缩小时 会显示切换方块 但是当我单击它时 什么也没有发生 Note 导航栏在全屏下工作正常 它只是在小窗口中 当我单击切换按钮时 下拉菜单不会出现 想知道是否有人知道如何解决它 这
  • 无法在 Eclipse 上调试基于 Android 库构建的 Android 本机代码

    我已经为此苦苦挣扎了三天 但无法完成 我有一个 android 项目 它链接到 eclipse 上的 android 库 其中包含本机代码 I saw 这个问题 https stackoverflow com questions 12638
  • pandas - 获取日期时间数据框中每天的第一个和最后一个值

    我有一个月的数据框 不包括周六和周日 每 1 分钟记录一次 v1 v2 2017 04 03 09 15 00 35 7 35 4 2017 04 03 09 16 00 28 7 28 5 2017 04 03 16 29 00 81 7
  • 处理表中的溢出

    如果我有一个像这样非常非常简单的例子的表 table table layout fixed width 300px td1 width 100px td2 width 200px 在我的其中之一 td2包含一个图像 可以说 300px in
  • C++ 删除静态数据

    如果我有一个类 其中包含分配在堆上且永不更改的私有静态数据 那么我应该什么时候 如果有的话 删除它 据我了解 类本身永远不会被构造 因为类不是 C 中的第一类对象 那么没有析构函数来删除其中的静态数据 我是 C 新手 如果我对 C 的理解有
  • 如何使用logstash插件-logstash-input-http

    我正在探索 Logstash 以接收 HTTP 上的输入 我已经使用以下方式安装了 http 插件 插件安装logstash input http 安装成功 然后我尝试使用以下命令运行logstash Logstash e 输入 http
  • R:Tibble 与 ggplot2(绘制图表)

    我正在尝试遵循 R 中的教程 https rviews rstudio com 2017 09 25 survival analysis with r https rviews rstudio com 2017 09 25 survival
  • 当用户调整 QMainWindow 大小时如何分配回调?

    我既无法在 QMainWindow 上找到类似教程的调整大小事件方案 也没有在 Qt 设计窗口的下拉菜单中看到任何用于添加调整大小事件的选项 我是 Qt 新手 我想为 QMainWindow 调整大小事件编写一个槽函数 有这样的活动吗 我怎
  • 在 Excel 中设置 csv 文件格式

    Win XP Excel 2007 我知道还有很多关于 csv 格式的其他帖子 但无法找到我需要的内容 我们的一些数据被另一家公司保存在异地 他们每天早上都会向我们发送包含前几天数据的 csv 文件 问题是这些数据来自可能具有下拉列表的网络
  • 使用sync_imports()在IPython.parallel引擎上导入自定义模块

    我一直在玩 IPython parallel 我想使用我自己的一些自定义模块 但无法按照上的说明进行操作烹饪书 http ipython org ipython doc stable parallel parallel multiengin
  • Nifty Modal - 如何在没有按钮的情况下触发模式

    这个脚本 http stuff wp dreams com modal 提供了很棒的模式转换 我想使用它们而不是标准的警报消息 现在脚本的演示展示了如何通过按 a 来触发它们
  • 如何从 R 读取换行符分隔的 JSON 文件?

    我有一个换行符分隔 即每个 JSON 对象仅限于文件中的 1 行 name json1 name json2 name json3 在Python中 我可以轻松地阅读它 如下所示 我必须使用编码encoding cp850 读取我的真实数据
  • IllegalStateException:数据库已关闭(使用 ViewPager)

    我对导致此错误的原因感到困惑 因为我已确保正确关闭数据库适配器 至少我认为是 以下是 LogCat 的说法 所有这些标签的标签都是 AndroidRuntime 致命异常 主要 java lang IllegalStateException
  • 从 ASP.NET Core Web API 将多 GB 文件流式传输到 AWS S3

    我希望通过 ASP NET Core Web API 在 AWS S3 存储桶中创建一个大型 多 GB 文件 该文件足够大 我不想加载Stream在将其上传到 AWS S3 之前先将其存储到内存中 Using PutObjectAsync
  • 如何拆分结果中尾随空字符串的字符串?

    我对 Scala 字符串分割行为有点困惑 因为它不能一致地工作 并且缺少一些列表元素 例如 如果我有一个包含 4 列和 1 个缺失元素的 CSV 字符串 elem1 elem2 elem 4 split List elem1 elem2 e
  • [Cucumber][JVM][Maven]测试无法通过 maven 从命令行运行

    我正在使用 java cucumber 和 Maven 运行测试 我正在使用 Eclipse IDE pom xml 也具有 Cucumber 依赖项 我以两种方式运行测试 从 Eclipse IDE 我将测试作为 Junit 测试运行 测
  • 如何防止未经授权的蜘蛛抓取

    我想防止从我们的网站之一自动抓取 html 同时不影响合法的蜘蛛抓取 googlebot 等 是否已经存在可以实现此目的的东西 我是否使用了正确的术语 编辑 我主要是为了防止人们恶意这样做 IE 他们不会遵守 robots txt EDIT
  • 并行下载大量文件的有效方法

    我正在尝试从互联网下载大量文件 图片 我正在努力处理异步 并行 因为 a 我不能说是否有文件 我刚刚收到一百万个链接 其中要么是一张图片 300kb 到 3MB 要么是 404 页面不存在 因此 为了避免下载 0 字节文件 我询问同一页面两
  • 没有默认构造函数的类对象的值初始化

    我试图通过以下方式了解值初始化的确切行为T or T 对于类类型T在 C 11 中 让我困惑的是这两个片段取自http en cppreference com http en cppreference com 值初始化 http en cp
  • Swift 逆向工程:Swift 函数名称规则?

    我有一个关于 swift 函数名称规则的问题 当我尝试在 IDA Pro 中分析用 swift 编写的 iOS 应用程序 也许 OS X 也是同样的情况 例如 swift 2048 时 我得到了这样的函数名称 EXPORT TFC10swi