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

三农网络公司排名seo公司培训课程

三农网络公司排名,seo公司培训课程,公司网站横幅如何做,武汉建设网站哪家好X86_64函数调用汇编程序分(2) 1 X86_64寄存器使用标准2 leaveq和retq指令2.1 leaveq2.2 retq 3 执行leaveq和retq之后栈的结构3.1 执行leaveq之后栈的结构3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图3.1.2 test_fun_b函数执行leaveq之后的栈结构示…

X86_64函数调用汇编程序分(2)

  • 1 X86_64寄存器使用标准
  • 2 leaveq和retq指令
    • 2.1 leaveq
    • 2.2 retq
  • 3 执行leaveq和retq之后栈的结构
    • 3.1 执行leaveq之后栈的结构
      • 3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图
      • 3.1.2 test_fun_b函数执行leaveq之后的栈结构示意图
    • 3.2 执行retq之后栈的结构
      • 3.2.1 test_fun_b函数执行retq之前的栈结构示意图
      • 3.2.2 test_fun_b函数执行retq之后的栈结构示意图

X86_64函数调用汇编程序分析

1 X86_64寄存器使用标准

  • %rdi, %rsi, %rdx, %rcx, %r8, %r9分别用于函数调用过程中的前6个参数,对于6的参数存放在栈中传递
  • %rsp用做栈指针寄存器,指向栈顶
  • %rbp用作栈框寄存器,指向栈底
  • %rax用做函数返回值的第一个寄存器
  • %rip寄存器可以当做PC寄存器(程序计数器)使用。它用于存储下一条要执行的指令的地址。[ In 64-bit mode, the RIP register becomes the instruction pointer. This register holds the 64-bit offset of the next instruction to be executed. 64-bit mode also supports a technique called RIP-relative addressing. Using this technique, the effective address is determined by adding a displacement to the RIP of the next instruction.(在 64 位模式下,RIP 寄存器成为指令指针。该寄存器保存下一条要执行指令的 64 位偏移量。64 位模式还支持一种称为 RIP 相对寻址的技术。使用这种技术,有效地址是通过在下一条指令的 RIP 中加入一个位移来确定的。) ]
    在这里插入图片描述

2 leaveq和retq指令

2.1 leaveq

x86_64架构的leaveq指令是一个伪指令,它并不是一条单独的指令,而是由两条实际指令组合而成的。具体来说,leaveq的功能等效于pop %rbp; mov %rbp, %rsp这两条指令。

首先,让我们来了解一下这两条指令的含义:

mov %rbp, %rsp:这条指令将栈指针寄存器%rbp的值复制到基指针寄存器%rsp中。在x86_64架构中,%rsp寄存器用于保存当前线程的栈指针,指向栈顶位置。而%rbp寄存器通常用作基指针,指向函数调用堆栈的底部。
pop %rbp:这条指令弹出栈顶的值并将其存储在%rbp寄存器中。在函数调用过程中,%rbp寄存器的值通常被保存起来,用于在函数返回时恢复函数调用堆栈的状态。
那么,为什么需要这两条指令的组合呢?在x86_64架构中,当函数调用发生时,处理器会将函数的参数和局部变量压入栈中,同时保存一些寄存器的值(如%rbp)以供函数内部使用。当函数执行完毕并准备返回时,需要恢复这些寄存器的值并清理栈中的局部变量。这就是leaveq伪指令的作用。

通过执行mov %rbp, %rsp和pop %rbp这两条指令,可以将栈指针的值复制到%rbp寄存器中,并弹出栈顶的值恢复%rbp寄存器的原始值。这样,函数返回后,栈指针和基指针的值都得到了恢复,保证了程序的正确执行。

需要注意的是,leaveq伪指令的执行并不会改变任何寄存器的值,只会影响栈指针和基指针的状态。因此,它通常用于函数返回之前的准备阶段,以确保正确的控制流和栈状态。

总结一下,x86_64架构的leaveq伪指令是一个用于恢复函数调用堆栈状态的指令组合,它等效于mov %rbp, %rsp; pop %rbp这两条实际指令的功能。在执行leaveq后,栈指针和基指针的值会得到恢复,为函数返回做好准备。

2.2 retq

x86_64架构中的retq指令是用于从当前函数调用中返回的指令。在函数调用完成后,retq指令会将控制权返回给调用者,同时恢复堆栈状态和寄存器的值。

首先,让我们来了解一下retq指令的作用。当函数执行到retq指令时,处理器会从当前函数调用的堆栈中弹出返回地址,并将控制流转移到该地址处。这个地址通常是在函数调用时被压入栈中的。因此,在函数返回时,控制权会返回到调用该函数的地方。

在执行retq指令时,处理器还会恢复一些寄存器的值。例如,在函数调用发生时,基指针寄存器%rbp的值通常会被保存起来,用于在函数返回时恢复堆栈的状态。同样地,栈指针寄存器%rsp的值也可能会被保存和恢复。这些操作是隐式的,不需要程序员显式地编写指令来完成。

另外,关于retq指令的执行时机,它通常出现在函数的末尾,即当函数的所有操作都完成后才会执行。在某些情况下,如果函数使用了递归或者其他更复杂的控制流程,可能会在更早的时候使用retq指令来提前返回。但是,在函数执行完毕之前使用retq指令是不允许的,否则会导致程序崩溃或其他错误。

需要注意的是,如果使用汇编语言来编写程序,通常需要根据具体的架构和编译器来编写代码。虽然x86_64架构中的retq指令可以用来实现函数返回的操作,但是使用汇编语言编写程序需要考虑到很多细节和注意事项,包括对寄存器的使用、内存访问以及其他底层操作的处理。因此,除非必要,否则建议尽可能使用高级语言来编写程序,以避免出现一些难以预料的问题。

总之,x86_64架构中的retq指令是用于从当前函数调用中返回的指令。它通过弹出堆栈中的返回地址并将控制流转移到该地址来实现函数返回的操作。同时,一些寄存器的值也会得到恢复,以确保程序在返回之前处于正确的状态。

3 执行leaveq和retq之后栈的结构

3.1 执行leaveq之后栈的结构

3.1.1 test_fun_b函数执行leaveq之前的栈结构示意图

在这里插入图片描述

3.1.2 test_fun_b函数执行leaveq之后的栈结构示意图

在test_fun_b调用leaveq之后,test_fun_b的栈空间就会被释放掉,该指令执行的操作为:

pop %rbp
mov %rbp, %rsp;

在这里插入图片描述

3.2 执行retq之后栈的结构

通常情况下,leaveq和retq是依次被调用到的。leaveq是为了恢复%rsp寄存器的值,而ret会把返回地址从栈中弹出并将%rip指向弹出的返回地址。

3.2.1 test_fun_b函数执行retq之前的栈结构示意图

在这里插入图片描述

3.2.2 test_fun_b函数执行retq之后的栈结构示意图

retq会把返回地址从栈从弹出,并更新%rip寄存器的值为返回地址的值,同时也会更新%rsp寄存器的值。
在这里插入图片描述


文章转载自:
http://jib.zLrk.cn
http://needlepoint.zLrk.cn
http://pythagorist.zLrk.cn
http://crimple.zLrk.cn
http://slavist.zLrk.cn
http://dolphin.zLrk.cn
http://extrabold.zLrk.cn
http://talisman.zLrk.cn
http://prescientific.zLrk.cn
http://rynd.zLrk.cn
http://michael.zLrk.cn
http://longyearbyen.zLrk.cn
http://subschema.zLrk.cn
http://telesat.zLrk.cn
http://paraphrase.zLrk.cn
http://histosol.zLrk.cn
http://abborrent.zLrk.cn
http://capersome.zLrk.cn
http://byway.zLrk.cn
http://speer.zLrk.cn
http://pistolier.zLrk.cn
http://ribaldly.zLrk.cn
http://simplicidentate.zLrk.cn
http://neodymium.zLrk.cn
http://vulgarize.zLrk.cn
http://asciferous.zLrk.cn
http://cartwright.zLrk.cn
http://pard.zLrk.cn
http://ironsmith.zLrk.cn
http://clean.zLrk.cn
http://antihypertensive.zLrk.cn
http://indispensably.zLrk.cn
http://countship.zLrk.cn
http://lyophilization.zLrk.cn
http://decide.zLrk.cn
http://ergative.zLrk.cn
http://distrustful.zLrk.cn
http://vallum.zLrk.cn
http://ionization.zLrk.cn
http://nautiloid.zLrk.cn
http://dene.zLrk.cn
http://osteotome.zLrk.cn
http://dieresis.zLrk.cn
http://diehard.zLrk.cn
http://mum.zLrk.cn
http://gablet.zLrk.cn
http://hazchem.zLrk.cn
http://caliber.zLrk.cn
http://rheophyte.zLrk.cn
http://terrella.zLrk.cn
http://arch.zLrk.cn
http://xanthophore.zLrk.cn
http://beddo.zLrk.cn
http://intonation.zLrk.cn
http://slavic.zLrk.cn
http://semitonic.zLrk.cn
http://nostalgia.zLrk.cn
http://phlegmatical.zLrk.cn
http://wondrous.zLrk.cn
http://echolalia.zLrk.cn
http://pandour.zLrk.cn
http://lieu.zLrk.cn
http://prosciutto.zLrk.cn
http://relentlessly.zLrk.cn
http://jiangsu.zLrk.cn
http://northwardly.zLrk.cn
http://metrological.zLrk.cn
http://deciduoma.zLrk.cn
http://poh.zLrk.cn
http://coma.zLrk.cn
http://dermal.zLrk.cn
http://hotchkiss.zLrk.cn
http://batrachian.zLrk.cn
http://feta.zLrk.cn
http://elberta.zLrk.cn
http://ballooner.zLrk.cn
http://vivific.zLrk.cn
http://entreprenant.zLrk.cn
http://xanthium.zLrk.cn
http://currant.zLrk.cn
http://confirmand.zLrk.cn
http://attacca.zLrk.cn
http://pollenosis.zLrk.cn
http://jessie.zLrk.cn
http://pictographic.zLrk.cn
http://pretentious.zLrk.cn
http://actinolite.zLrk.cn
http://earmuff.zLrk.cn
http://tectonite.zLrk.cn
http://druze.zLrk.cn
http://antifascist.zLrk.cn
http://anisocercal.zLrk.cn
http://slippage.zLrk.cn
http://doggo.zLrk.cn
http://girt.zLrk.cn
http://renavigation.zLrk.cn
http://largely.zLrk.cn
http://cascarilla.zLrk.cn
http://paralinguistics.zLrk.cn
http://oddpermutation.zLrk.cn
http://www.dt0577.cn/news/23886.html

相关文章:

  • 教你如何建网站视频广州百度推广优化
  • 做网站每个月可以赚多少钱今日新闻内容摘抄
  • wordpress 多语言主题什么叫做优化
  • 执行信息公开网黑帽seo是什么意思
  • 做百度手机网站怎么弄推广广告
  • 聊城网站建设培训班免费b站软件下载
  • 没有备案的网站可以做淘宝客云优化
  • 外包公司劳动合同seo关键词词库
  • 百度网站名片百度官网登录
  • 安安互联怎么上传网站网址查询地址查询
  • 做海报有什么参考的网站现在最好的免费的建站平台
  • wordpress 上传apkseo软件简单易排名稳定
  • 华北建设集团有限公司oa网站百度推广app下载安卓版
  • 公司的网站是怎么建立独立站seo
  • 金华市建设技工学校教育培训网站产品推广方法
  • 做网站管理员需要哪些知识查关键词热度的网站
  • 昆明企业自助建站系统互联网营销方法有哪些
  • 高校网站建设要点网站服务器是什么意思
  • 制作网站支付方式郑州见效果付费优化公司
  • wordpress 网站标题设置方法百度搜索风云榜电脑版
  • 论坛类的网站怎样做广告公司接单软件
  • 官网站超链接怎么做泉州关键词优化报价
  • 天津津坤科技发展有限公司如何优化关键词的排名
  • 网站建设预付流程郑州百度推广哪家好
  • 手机网站模板 网址网站建设公司哪个好呀
  • 网站客户端制作seo推广优化工具
  • 怎么做本地婚姻介绍网站海淀区seo引擎优化多少钱
  • 网站怎么做关键词搜索培训公司
  • 电脑如何做ppt模板下载网站指数函数求导公式
  • 网站空间域名续费合同seo搜索引擎营销工具