| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Swift汇编1 -> 正文阅读 |
|
[移动开发]Swift汇编1 |
Swift内存窥探小工具
? ??现在基本是小端模式,目前看起来是从小到大,但实际读取出来会倒序,高高低低,0x00 00 00 00 00 00 00 01, 前面24个字节关联值,第二十五存成员值0-4 枚举用一个字节存成员值,用最大的内存占用最大的关联值N个字节存关联值,所有的case都共用这些关联值的字节? 小工具获取内存数据 ?小工具:按一个字节对齐打印 ?switch底层实现 先取出成员值的数据,根据数据,再绑定关联值 ?汇编语法:jump,je是跳转语句 程序的本质 程序安装到手机和硬盘上 内存存的都是010101二进制数据,CPU读取内存的数据,再控制各种输出设备 ?在Mac的汇编里,寄存器会加%符号 1+rax CPU硬件不支持直接将一个地址的数据移动到另一个地址上面,必须要通过寄存器, 做数据运算时也需要通过CPU 寄存器,计算完结果后再移动回内存 汇编语言的发展历史 计算机只能识别二进制代码 高级语言一般时先转义成汇编再编译成机器语言,机器语言很难反编译成高级语言,因为不同的高级语言可能会转义出相同的机器语言? ?汇编语言的种类,随着CPU的位数发展和增多,对应的汇编语言也会不同,汇编语言严重更依赖CPU架构,架构不同,汇编语言就会不同 常见的汇编指令 intel将右边送给左边,Mac将左边送到右边 Intel中括号里面放的是内存地址 寄存器+0x1ff7的内存空间 movq是将内存地址里面的数据取出来赋值,存数据 leaq是直接将地址值赋值,存地址? jmp用来跳转到对应的地址里执行 所有的内存指令是挨在一起的 jamp跳过去后就不会头,继续执行 call,函数调用,会调到指定的地址,再配合retq返回到原来的位置的吓一条语句 jump *%rax是跳转到动态地址,%rax存储的是地址 AT&T汇编结尾的单词q、l、b,代表操作数长度 不同时代的CPU 有不同的位数,新的CPU会兼容老的汇编的位数做 %r开头的事x64汇编,都是8个字节的,e开头的事32位4个字节的,register ? 结构体、对象存在内存中,不存在寄存器里 lldb常用指令 常用的lldb指令? step over会跳过函数 step into会进入函数继续执行 n,s是调试高级语言的 ni,si是调试汇编语言的 ,si在call的汇编命令时会进入到对应汇编函数里 finish用在调试汇编的断点跳过,或者完成当前的函数, xor是异或 立即数自变量imm |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:56:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |