AT&T汇编a+y(%reg)含义及musl sigsetjmp转Intel语法疑问
AT&T转Intel语法:sigsetjmp中的rbx操作解析
原AT&T代码的含义
首先明确AT&T汇编的核心规则:内存寻址格式为位移(%基址寄存器),表示内存地址是基址寄存器的值 + 位移;指令顺序为源, 目标。
第一行代码:
mov %rbx,72+8(%rdi)72+8是位移的直接计算,结果为80;%rdi作为基址寄存器,指向jmp_buf结构体的起始地址。- 实际作用:把寄存器
rbx的值,写入到rdi+80对应的内存位置——这是在sigsetjmp中保存非易失性寄存器rbx的上下文状态。
第二行代码:
mov 72+8(%rbx),%rbx- 内存地址为
rbx的值 + 80,这里的rbx应该是指向jmp_buf结构体的指针。 - 实际作用:从
rbx+80的内存位置读取之前保存的值,加载回寄存器rbx——对应siglongjmp时恢复上下文的操作。
- 内存地址为
转换为Intel语法
Intel汇编的规则为:内存寻址格式是[基址寄存器 + 位移],指令顺序为目标, 源,对应转换如下:
- 第一行转换后:
mov [rdi + 80], rbx - 第二行转换后:
mov rbx, [rbx + 80]
补充说明
在x86_64的System V调用约定中,rbx属于非易失性寄存器,函数调用后必须保留其原值。sigsetjmp需要完整保存执行上下文,因此必须将这类寄存器的状态写入jmp_buf结构体;siglongjmp则从结构体中恢复这些值,确保跳转后执行环境的一致性。
内容的提问来源于stack exchange,提问作者snowytrees
相关产品推荐
相关产品推荐

