![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
汇编
文章平均质量分 68
汇编
洋洋dev
别在机场等一艘船
展开
-
汇编看函数栈构成
汇编查看源码的内存分布源码- (void)test1 { int a = 1; NSLog(@"%p",&a);}& 取变量a地址 16进制输出a变量的值(lldb) p &a(int *) $2 = 0x00007ffee6c9c00c(lldb) p/x a (int) $12 = 0x00000001那么 0x00007ffee6c9c00c 怎么来的0x00000001 是怎么存储的完整汇编指针偏移`-[ViewContro原创 2021-11-18 17:08:35 · 588 阅读 · 0 评论 -
汇编看指针
前言开发中经常使用指针访问变量修改变量值, 那么编译器是怎么翻译指针的 或者说指针在汇编层面到底是什么mov 和 lea 指令指针的分析离不开这两个指令,简单看下mov指令mov指令GNU汇编器输出AT&T汇编时为 mov 指令添加了一个维度,在其中必须声明要传送的数据元素的长度因此,指令就变成了如下:movx其中 x 可以是下面的字符:1,q用于64位的4字值2,l用于32位的长字值3,w用于16位的字值4,b用于8位的字节值源码- (void)asm_point {原创 2021-11-19 18:28:28 · 2425 阅读 · 0 评论 -
汇编看函数栈
函数栈对齐堆栈栈在计算机中就是一块连续的存储区域(至少虚拟地址是连续的),在这块连续的存储区域写入和删除数据依据先进后出的规则进行栈空间由系统自动分配自动释放,我们经常在函数内部创建的局部变量等数据是存放在栈帧中在虚拟地址上是连续的 在物理内存是分散的(本文讨论都是在虚拟内存上)栈的生命周期1、Kernel创建用户栈,为栈分配内存空间,用户栈的建立是伴随着可执行文件的加载建立的。栈其实分为内核栈 和用户栈 内核栈不在讨论范围内2、运行到用户程序的main函数,main()函数内部调原创 2021-11-18 20:42:55 · 325 阅读 · 0 评论 -
汇编看if else
我们先来思考几个问题1、 我们经常使用到的if else 流程语句代码 是怎么被机器读懂的?2、 它背后的本质是什么?3、从汇编的角度去看 if else 又是什么呢 ?4、不同的汇编对if else 的解释 是相同的吗?本文分别从ARM和AT&T汇编去分析一段oc代码源码- (void)cycle { int a = 6; int b = 10; if (a == b) { NSLog(@"相等"); }else {原创 2021-11-19 11:53:08 · 1679 阅读 · 0 评论