xcode反汇编调试iOS模拟器程序(二)看懂反汇编

简介: 这里当然不会从零开始讲汇编代码了,零基础的话可以看看 王爽 写的书《汇编语言》,请自己找度娘或谷哥要了。其实只为了iOS调试的话并不需要学多少,懂几个命令和明白寄存器的作用就行。

这里当然不会从零开始讲汇编代码了,零基础的话可以看看 王爽 写的书《汇编语言》,请自己找度娘或谷哥要了。其实只为了iOS调试的话并不需要学多少,懂几个命令和明白寄存器的作用就行。建议遇到不懂的时候再搜索看看。

这一节主要讲讲书上没有的东西。


在xcode中看到的汇编语法不是熟悉的intel格式,而是叫AT&T汇编。基本上只要懂intel,at&t会很快上手。两者的区别请参考这篇文章:

AT&T汇编http://blog.csdn.net/bigloomy/article/details/6581754

例如,在前一节的截图中,会看到movl这样的指令,比熟悉的mov多了个l。这个l表示本次操作是长字型(4字节)数据,操作数是32bit。

这里要注意,lldb和gdb看到的结果会有些差别,下面是对同一个C++函数的截图:

这个是lldb:

这个是gdb:


可以看到lldb会比gdb在AT&T的格式表示上更规范化,gdb只会在一些特定的地方才加l。

lldb以十进制表示常量;左侧内存地址省略了0;

gdb在尖括号内多显示了函数内的偏移。

其实最新版的gdb又会显示得不同,但是apple在强推lldb,不再升级gdb了……


如果实际的代码是在处理浮点数,则在反汇编中会看到xmm0,xmm1等的寄存器,如:

这些寄存器叫xmm寄存器,是为SSE指令服务的,所以也叫sse寄存器。操作他们的指令会有ss后缀。度娘给出了更多信息:http://baike.baidu.com/view/2679650.htm

sse寄存器是一组128bit的寄存器,其值有很多种可能性,可通过gdb查看,详情请查看下一节


总结一下,主要明白这几个概念就行:

1. mov xxx, yyy 表示把xxx的值赋给yyy

2. call xxx 表示调用某函数

3. jmp xxx 表示直接跳转到某内存地址,一般是函数的入口地址

4. ret 表示要返回下一层堆栈了,如果函数有返回值,会存在eax寄存器里。

相关实践学习
阿里云图数据库GDB入门与应用
图数据库(Graph Database,简称GDB)是一种支持Property Graph图模型、用于处理高度连接数据查询与存储的实时、可靠的在线数据库服务。它支持Apache TinkerPop Gremlin查询语言,可以帮您快速构建基于高度连接的数据集的应用程序。GDB非常适合社交网络、欺诈检测、推荐引擎、实时图谱、网络/IT运营这类高度互连数据集的场景。 GDB由阿里云自主研发,具备如下优势: 标准图查询语言:支持属性图,高度兼容Gremlin图查询语言。 高度优化的自研引擎:高度优化的自研图计算层和存储层,云盘多副本保障数据超高可靠,支持ACID事务。 服务高可用:支持高可用实例,节点故障迅速转移,保障业务连续性。 易运维:提供备份恢复、自动升级、监控告警、故障切换等丰富的运维功能,大幅降低运维成本。 产品主页:https://www.aliyun.com/product/gdb
目录
相关文章
|
7月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
94 0
|
7月前
|
存储 运维 安全
iOS加固原理与常见措施:保护移动应用程序安全的利器
iOS加固原理与常见措施:保护移动应用程序安全的利器
160 0
|
4月前
|
监控 算法 iOS开发
Xcode调试内存最新理解
【8月更文挑战第12天】在Xcode中进行内存调试对确保iOS应用的稳定性和性能至关重要。主要利用Instruments套件内的工具如Leaks检测内存泄漏,Allocations追踪内存分配详情,及Memory Graph Debugger提供直观的内存结构视图。Xcode还支持内存图视图以了解对象布局与引用,动态内存分析实现实时监控,及符号化调试信息帮助定位问题源代码。最佳实践包括遵循内存管理原则、定期调试、优化代码逻辑,以及学习优秀代码案例。通过这些技术和策略,开发者能有效管理和优化应用的内存使用。
103 0
|
7月前
|
监控 测试技术 iOS开发
查看ios 应用程序性能
查看ios 应用程序性能
85 0
|
7月前
|
IDE 开发工具 Swift
【Swift开发专栏】Swift的Xcode调试技巧
【4月更文挑战第30天】本文介绍了Swift开发者必备的Xcode调试技巧,分为三部分:调试界面概览、常用操作和高级技术。内容涵盖调试区域、断点管理、单步调试、变量查看及LLDB命令行调试。通过学习条件断点、异常断点、视图调试等高级技术,开发者能提升问题解决效率。熟悉这些工具将有助于优化开发流程并增强项目性能。
170 1
|
7月前
|
iOS开发
XCode控制台调试无法看到函数跟踪或无法看到输出的日志问题及解决方案
XCode控制台调试无法看到函数跟踪或无法看到输出的日志问题及解决方案
311 0
|
7月前
|
安全 测试技术 iOS开发
无需付费证书通过Xcode进行安装调试
无需付费证书通过Xcode进行安装调试
345 0
|
7月前
|
iOS开发 开发者
iOS移动应用程序的备案与SHA-1值查看
iOS移动应用程序的备案与SHA-1值查看
148 2
|
7月前
|
JSON JavaScript 安全
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据
iOS 应用程序数据保护:如何保护 iOS 应用程序中的图片、资源和敏感数据
|
7月前
|
iOS开发 开发者 索引
批量上传 iOS 应用程序截图的实用技巧
批量上传 iOS 应用程序截图的实用技巧