为了账号安全,请及时绑定邮箱和手机立即绑定

golang asm代码中的未知“ptr”变量

golang asm代码中的未知“ptr”变量

Go
慕娘9325324 2023-06-05 19:29:53
最近刚开始看atomic.LoadUint64的源码,在下面的asm代码中得到了一个未知变量“ptr”:TEXT runtime∕internal∕atomic·Load64(SB), NOSPLIT, $0-12                                                                                                                                                                                           MOVL    ptr+0(FP), AX                                                                                                                                                                                                                         TESTL   $7, AX                                                                                                                                                                                                                                JZ  2(PC)                                                                                                                                                                                                                                     MOVL    0, AX // crash with nil ptr deref                                                                                                                                                                                                     MOVQ    (AX), M0                                                                                                                                                                                                                              MOVQ    M0, ret+4(FP)                                                                                                                                                                                                                         EMMS                                                                                                                                                                                                                                          RET我找不到这个变量的声明,也找不到任何关于这个变量的文档,谁能告诉我一下?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

Go 汇编程序快速指南

符号

伪寄存器FP是用于引用函数参数的虚拟帧指针。编译器维护一个虚拟帧指针并将堆栈上的参数引用为该伪寄存器的偏移量。因此0(FP)是函数的第一个参数, 8(FP)是第二个(在 64 位机器上),依此类推。但是,当以这种方式引用函数参数时,有必要在开头放置一个名称,如first_arg+0(FP)and second_arg+8(FP)。(偏移量的含义——从帧指针开始的偏移量——不同于它在 中的使用SB,它是从符号开始的偏移量。)汇编器强制执行此约定,拒绝普通0(FP)和 8(FP). 实际名称在语义上无关紧要,但应该用于记录参数名称。值得强调的是,它FP始终是伪寄存器,而不是硬件寄存器,即使在具有硬件帧指针的体系结构上也是如此。


ptr, in ptr+0(FP), 是函数第一个参数的名称。该参数可能是一个指针。


查看完整回答
反对 回复 2023-06-05
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信