iOS Swift逆向——deMangle过程中的偏移计算

碰到好多函数最开始都会调用这个函数,xref了一下,发现有上万个xref。

__int64 __fastcall sub_1000B6ED0(__int64 *a1)
{__int64 result; // x0result = *a1;if ( result < 0 ){result = swift_getTypeByMangledNameInContext((char *)a1 + (int)result, -(result >> 32), 0LL, 0LL);*a1 = result;}return result;
}

  

计算实现De-Mangle,可以给sub开头的方法做备注了。

以下面这个ref为例:

v8 = sub_1000B6ED0(&unk_1039839C0);
__data:00000001039839C0 unk_1039839C0   DCB 0x1C                ; DATA XREF: sub_1000219E0+34↑o
__data:00000001039839C0                                         ; sub_1000219E0+88↑o ...
__data:00000001039839C1                 DCB 0x80
__data:00000001039839C2                 DCB 0x4D ; M
__data:00000001039839C3                 DCB 0xFF
__data:00000001039839C4                 DCB 0xF9
__data:00000001039839C5                 DCB 0xFF
__data:00000001039839C6                 DCB 0xFF
__data:00000001039839C7                 DCB 0xFF
__data:00000001039839C8 unk_1039839C8   DCB 0xB8                ; DATA XREF: sub_10010950C+18↑o
__data:00000001039839C8                                         ; sub_1002C06B0↑o ...
__data:00000001039839C9                 DCB 0x2A ; *
__data:00000001039839CA                 DCB 0x4B ; K
__data:00000001039839CB                 DCB 0xFF
__data:00000001039839CC                 DCB 0xFA
__data:00000001039839CD                 DCB 0xFF
__data:00000001039839CE                 DCB 0xFF
__data:00000001039839CF                 DCB 0xFF

 unk_1039839C0这个整理出来,地址对应X19寄存器,值对应X0寄存器

X0 = 0xFFFFFFF9FF4D801C
X19 = 0x1039839C0

写个python模拟计算一下: 

def asr(value, shift):# 算术右移函数if value & (1 << 63):# 如果最高位是1,表示负数,需要填充1return (value >> shift) | (0xFFFFFFFFFFFFFFFF << (64 - shift))else:# 否则直接右移return value >> shiftdef sxtw(value):# 符号扩展32位到64位if value & (1 << 31):# 如果最高位是1,表示负数,需要填充1return value | 0xFFFFFFFF00000000else:# 否则直接返回return value# 初始值
X0 = 0xFFFFFFF9FF4D801C
X19 = 0x1039839C0
# 算术右移32位
shifted_value = asr(X0, 32)# 取负值并确保结果在64位范围内
X1 = (-shifted_value) & 0xFFFFFFFFFFFFFFFF# 打印结果
print(f"X1 = 0x{X1:016X}")# 符号扩展W0到64位
extended_W0 = sxtw(X0 & 0xFFFFFFFF)# 相加并确保结果在64位范围内
X0 = (X19 + extended_W0) & 0xFFFFFFFFFFFFFFFF# 打印结果
print(f"X0 = 0x{X0:016X}")

输出结果: 

X1 = 0x0000000000000007
X0 = 0x0000000102E5B9DC

 byte_102E5B9DC这个字段的长度正好是7

 这个名字IDA自动给出了Demangle之后的内容。使用命令行也可以自己解析:

swift demangle s10Foundation3URLVMn                   
$s10Foundation3URLVMn ---> nominal type descriptor for Foundation.URL

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hyper-V安装使用教程

操作系统&#xff1a;Windows Server 2019 Datacenter 1.安装Hyper-V (1)控制面板 > 程序 > 启用或关闭 Windows 功能 (2)勾选Hyper-V > 安装重启 2.Hyper-V管理器 (1)连接到服务器 > 本地计算机 (2)虚拟交换机管理器 > 新建虚拟网络交换机 > 外部 > 创…

Spark的安装配置及集群搭建

Spark的本地安装配置&#xff1a; 我们用scala语言编写和操作spark&#xff0c;所以先要完成scala的环境配置 1、先完成Scala的环境搭建 下载Scala插件&#xff0c;创建一个Maven项目&#xff0c;导入Scala依赖和插件 scala依赖 <dependency><groupId>org.scal…

国家唯一认证的防脱发产品,双11速速囤

脱发的一定都深刻知道掉发严重反复折磨的痛苦&#xff01;为了能早点调理好掉发严重的问题&#xff0c;真的买了一堆育发液&#xff0c;也是踩了不少雷&#xff0c;今天就把用过好用的分享出来&#xff0c;有需要的趁着双十一赶紧囤点~ 一、露卡菲娅防脱精华液&#xff1a;科技…

【硬盘知识】记一次买 希捷 二手 清零盘 的经历(怎么检测硬盘的好坏、健康程度)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

信息搜集 ---开发框架识别

开发框架识别 插件推荐 插件商店搜索wappalyzer Python - Django&Flask Django 1、wappalyzer插件 2、返回数据包的特征字段 Set-Cookie:expires Flask 1、wappalyzer插件 2、返回数据包的特征字段 Set-Cookie:expires 或 Etag: "flask PHP - ThinkPHP&Lar…

光纤光学——弱导光纤与线偏振模

一、基本思想 弱导光纤&#xff1a;n1≈ n2 , k0n1 ≈ k0n2&#xff0c;亦即&#xff1a; k0n1 ≈ k0 n2 ≈ 光线与纤轴的夹角小&#xff1b;芯区对光场的限制较弱&#xff1b; 消逝场在包层中延伸较远。 弱导光纤场的特点&#xff1a; HEι1,m模式与EHι-1,m色散曲线相近…

Vivado - Aurora 8B/10B IP

目录 1. 简介 2. 设计调试 2.1 Physical Layer 2.2 Link Layer 2.3 Receiver 2.4 IP 接口 2.5 调试过程 2.5.1 Block Design 2.5.2 释放 gt_reset 2.5.3 观察数据 3. 实用技巧 3.1 GT 坐标与布局 3.1.1 选择器件并进行RTL分析 3.1.2 进入平面设计 3.1.3 收发器布…

R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍教程下载数据加载R包导入数据数据预处理数据描述数据切割调节参数构建模型预测测试数据评估模型模型准确性混淆矩阵模型评估指标ROC CurvePRC Curve保存模型总结优点:缺点:系统信…

Gin框架操作指南01:开山篇

Gin是目前最流行&#xff0c;性能最好的的GoWeb框架&#xff0c;几乎成为了学习GoWeb必备的知识。本人最近也在学Gin&#xff0c;在b站搜了很多教程&#xff0c;发现有的教程不够详细&#xff0c;有的教程工具包安装有问题&#xff0c;而官方文档的很多示例代码又不全&#xff…

deepin V23 部署Ollama

系统&#xff1a;Deepin V23 1.Ollama简单介绍 Ollama是一个开源的大语言模型本地部署工具&#xff0c;通过它可以方便的在本机部署开源大模型。 Ollama仓库地址&#xff1a;https://github.com/ollama/ollama Ollama官方下载地址&#xff1a;https://…

多个NVR同时管理EasyNVR多品牌NVR管理工具/设备助力KTV视频监控建设

随着娱乐产业的蓬勃发展&#xff0c;KTV作为一种集唱歌、聚会、休闲于一体的娱乐场所&#xff0c;深受大众喜爱。然而&#xff0c;随着人流量的增加和夜间营业的特性&#xff0c;KTV的安全问题也日益凸显。在这样的背景下&#xff0c;NVR监测软件/设备EasyNVR的引入不仅成为了一…

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…

PL/SQL Developer15和Oracle Instant Client安装配置详细图文教程

一、下载介质 1、Oracle Instant Client Oracle Instant Client Downloads | Oracle 中国 2、PL/SQL DEVELOPER PL/SQL Developer - Allround Automations Free trial - Allround Automations 二、安装介质。 1、安装plsqldev1504x64.msi。 一路默认下一步。 选择输入许可信…

Facebook的AI驱动发展:人工智能如何改变社交体验

个性化内容推荐 Facebook利用AI算法分析用户的行为数据&#xff0c;包括点赞、评论、分享和浏览历史。这些数据使得平台能够深入了解用户的兴趣和偏好&#xff0c;从而提供个性化的内容推荐。例如&#xff0c;用户在浏览动态时&#xff0c;AI系统会根据用户的互动历史&#xf…

大学生项目竞赛:如何通过面试选拔优秀队友

大学生项目竞赛&#xff1a;如何通过面试选拔优秀队友 面试前的自我提问行为面试法&#xff1a;识别真实水平选人后的用人策略结语 作为一名积极参与各类项目竞赛的大学生&#xff0c;我深刻体会到团队成员的选择对于项目成功的重要性。在这篇文章中&#xff0c;我将分享我的一…

计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

用Aconvert.com将MOBI文件转换为PDF:一步步指南

在今天的数字时代&#xff0c;文件格式转换是日常办公和学习中常见的需求之一。MOBI格式的电子书文件在某些设备上不太方便阅读&#xff0c;而PDF格式则更加通用。本文将为你详细介绍如何使用Aconvert.com将MOBI文件转换为PDF文件。 1. 访问Aconvert.com 首先&#xff0c;打开…

【数据库设计】逻辑结构设计

E-R实体集的转换 概念结构设计之后就是对E-R图进行逻辑结构设计&#xff1a;即将E-R图转化成关系的过程。逻辑结构设计主要用于数据库管理系统上&#xff0c;为了让数据在计算机系统中更好地表示。 此设计过程用到的数据模型有&#xff1a;除了前面讲过的关系模型还有层次模型…

功能驱动方法是什么?如何有效管理技术债务以避免项目风险?

在软件开发和项目管理领域&#xff0c;“功能驱动方法”&#xff08;Feature-Driven Development, FDD&#xff09;和“技术债务”&#xff08;Technical Debt&#xff09;是两个与项目成功紧密相关的重要概念。功能驱动方法是一种高效的敏捷开发方式&#xff0c;而技术债务则代…

飞腾D3000多核性能

飞腾d3000多核应该超过龙芯3a6000不小于30%&#xff0c;所以了肯定超过10100。d3000单核应该比海光3250强一点点&#xff0c;多核可能稍有不如&#xff0c;因为没有超线程。 3A6000单核&#xff0c;多核性能均明显不如飞腾D3000&#xff0c;兆芯KX-7000&#xff0c;海光3350&a…