当前位置: 首页 > wzjs >正文

sns网站需求申请域名网站价格

sns网站需求,申请域名网站价格,可以做c语言任务的网站,自己做网站挂广告author: hjjdebug date: 2025年 06月 12日 星期四 14:24:40 CST descrip: c/c 汇编码中的.cfi 指令有什么用途? 文章目录 1. 几个简写词.2. 看一个简单的测试代码:3. 生成汇编代码:4. 分析.cfi 指令5. 小结: 1. 几个简写词. cfi(call frame info) 调用帧信息, 名词. 描述的是…

author: hjjdebug
date: 2025年 06月 12日 星期四 14:24:40 CST
descrip: c/c++ 汇编码中的.cfi 指令有什么用途?


文章目录

  • 1. 几个简写词.
  • 2. 看一个简单的测试代码:
  • 3. 生成汇编代码:
  • 4. 分析.cfi 指令
  • 5. 小结:

1. 几个简写词.

cfi(call frame info) 调用帧信息, 名词. 描述的是调用栈的信息
cfa(call frame address) 调用帧地址, 就是当你执行 call xxx 时,堆栈esp的地址, 这个地址很重要.
它是一个固定的地址,该地址处,执行call时, 首先会存如一个8字节的返回地址.(x86_64)

cfi 作用: 异常时stack 回滚.
当程序崩溃或 C++ 异常抛出时,函数后面的代码就不执行了, 那堆栈如何恢复?
如何找到异常接受代码, 并恢复上一级甚至上上一级堆栈
CFI 信息就保留着各栈帧之间的信息.
eh_frame 节中的 CFI 指令, 记录了各调用栈信息,处理异常代码可据此正确回滚调用栈.

2. 看一个简单的测试代码:

这里不讲回滚细节, 这里之间.cfi 指令是什么, 记录了什么信息.

$ cat main.cpp
#include <stdio.h>
int Add(int i, int j)
{return i+j;
}int main()
{int i=Add(2,3);printf("i:%d\n",i);return 0;
}

3. 生成汇编代码:

g++ -S -o 1.S main.cpp

分析一下Add 函数的汇编代码.

Add(int, int):
.LFB0:.cfi_startprocendbr64pushq	%rbp.cfi_def_cfa_offset 16.cfi_offset 6, -16movq	%rsp, %rbp.cfi_def_cfa_register 6movl	%edi, -4(%rbp)movl	%esi, -8(%rbp)movl	-4(%rbp), %edxmovl	-8(%rbp), %eaxaddl	%edx, %eaxpopq	%rbp.cfi_def_cfa 7, 8ret.cfi_endproc

4. 分析.cfi 指令

前面已经说过了,cfi 开头的指令都是为了堆栈回滚而存在的,为了形成eh_frame节信息.
.cfi_startproc ;代表栈帧的开始
.cfi_endproc ;代表栈帧的结束

cfi_def_cfa_offset 16
.cfi_def_cfa_offset 16
def 是 define 的简写

定义调用帧地址偏移 为 16
就是说当你调用了pushq %rbp 后, 这个地方的堆栈地址比调用时的堆栈地址偏移了16bytes
这样定义显然是正确的, 因为此时堆栈中保存了8bytes 返回地址, 8bytes ebp值.
cfi 指令就是要跟踪堆栈的变化.

.cfi_offset 6, -16
6号寄存器 值为CFA-16

.cfi_def_cfa_register 6
定义cfa寄存器是6号寄存器
在movq %rsp,%rbp 后调用定义该cfi指令, 说明6号寄存器是%rbp

.cfi_def_cfa 7, 8
7号寄存器 值为CFA+8
在popq %rbp 后调用该指令, 此时堆栈中还有8字节的返回地址,可知.
此处的7号寄存器对应esp
定义cfa 的几号寄存器可能是保留cfi信息的一个必要手段,这里没有具体分析其与eh_frame的对应关系.

5. 小结:

总之, cfi 指令是为了形成eh_frame节而定义的指令,用来跟踪堆栈地址.以备随时可以返回调用帧.
由于函数执行过程中也可能使用堆栈,所以无非就是跟踪定义栈的偏移, 栈的偏移.
具体怎样触发恢复正确的栈帧,这个细节我们没有分析,这应该分析eh_frame 中保留的数据.
这里只需要知道汇编中.cfi 的大体作用就可以了.
由此我们也可以断定,删除所有.cfi指令,不会影响代码的执行. 如果代码没有异常的话.
只有代码出现异常,才会使用到.cfi信息. 这样就解除了对汇编码中.cfi 指令的疑惑.

从另一个角度看,.cfi指令是伪指令,它并不对应cpu的指令代码,但给编译器提供了一些元信息,
就是辅助信息,能够让编译器了解每个frame对应的堆栈信息. 以备不时之需.


文章转载自:

http://sQZSHdlw.yzxhk.cn
http://L8QfuVGJ.yzxhk.cn
http://U7qnjg7J.yzxhk.cn
http://71YjjycW.yzxhk.cn
http://iW9nviVo.yzxhk.cn
http://dnVUli0g.yzxhk.cn
http://8RGo4YdZ.yzxhk.cn
http://GrI75R0A.yzxhk.cn
http://jVLUTeaE.yzxhk.cn
http://jtNwOkAr.yzxhk.cn
http://j32KGZam.yzxhk.cn
http://c61WyYZ8.yzxhk.cn
http://mTRGfyGJ.yzxhk.cn
http://GA9TK7qK.yzxhk.cn
http://PrWIr3ln.yzxhk.cn
http://QdGV9e6p.yzxhk.cn
http://VO5FoFtN.yzxhk.cn
http://seVBH4Su.yzxhk.cn
http://D71oTGpK.yzxhk.cn
http://zX2eIm8b.yzxhk.cn
http://rHZ7mm5l.yzxhk.cn
http://6Vu3HJMa.yzxhk.cn
http://6i63DxhM.yzxhk.cn
http://cBBOZDQh.yzxhk.cn
http://ksSZrzOJ.yzxhk.cn
http://6bpvrVK3.yzxhk.cn
http://ciXlcEkn.yzxhk.cn
http://2vPcIDZP.yzxhk.cn
http://OxY61ev2.yzxhk.cn
http://XTLCF0fZ.yzxhk.cn
http://www.dtcms.com/wzjs/776487.html

相关文章:

  • 如何建立一个网站视频教学做网站前两个月应该干什么
  • 郑州个人网站建设wordpress当前页码颜色不变
  • 怎么用网站挂QQ侨联 文化宣传 侨联网站建设
  • 简答网站建设流程有哪些做网站哪家最便宜
  • 非洲外贸网站河南省监理建设协会网站
  • 上海平台网站建设公司排名学做婴儿衣服的网站
  • 松江区网站开发wordpress顶部菜单调用
  • 电子网站模板android studio中文怎么设置
  • 贵州城乡住房建设网站ie浏览器在线使用
  • 商务网站的主要存在形式中国十大最强装饰公司
  • 网站如何识别移动端html挂载到wordpress
  • 唐山市政建设总公司网站合肥营销型网站
  • 网站建设如何做代理主要干什么
  • wix做网站教程网站开发好了如何上线
  • 佛山网站建设 合优中国纪检监察报订阅
  • 淄博做网站的赤峰市建设网站
  • 企业网站建设方案费用预算佛山专业网站建设价格
  • 做服装团购网站如何注册公司邮箱
  • 洛阳做网站找哪家好门户网站seo前期
  • 网站建设信用卡取消部门网站建设的工作汇报
  • 成都私人视频网站制作平台在哪里做网站好
  • 上海网站建设网页设可用来制作网页的软件
  • 做网站总结体会企信网邮寄诚信经营先进企业
  • 正规的网站制作联系方式备案域名批量查询
  • 中国建设工程造价信息网站潜江资讯网手机版
  • 网站建设比较牛的企业北京赛车网站开发公司
  • 自助服务系统网站国产的主题wordpress
  • 茶网站建设需要多少钱一级页面的网站怎么做的
  • 北京模板网站建设全包舟山建设管理网站
  • 爱做的小说网站吗怎么做谷歌收录的网站吗