You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于给定汇编代码中调用atoi前栈是否对齐的技术问询

汇编代码栈对齐分析(调用atoi前)

待分析的汇编代码如下:

global  main
         extern  atoi
         default rel

         section .text
main:    push    rdi
         push    rsi
         mov     rdi, [rsi]
         call    atoi
         mov     rdi, rax
         mov     rsi, 1
         mov     rax, 1
         syscall
         pop     rsi
         pop     rdi
         xor     rax, rax
         ret

分析依据

基于SysV AMD64 ABI规范,x86-64平台下调用外部函数前,栈指针RSP必须满足16字节对齐(即 RSP % 16 == 0)。这是因为call指令会自动压入8字节的返回地址,确保被调用函数入口处的RSP + 8仍保持16字节对齐,满足函数栈帧的对齐要求。

逐步骤栈状态分析

  1. 进入main时的栈状态:
    程序启动后,_start函数执行call main调用main。执行该call前,RSP是16字节对齐的;执行call后,RSP因压入8字节返回地址变为 16n - 8(n为整数),此时RSP模16余8,处于未对齐状态。

  2. push rdi后的栈状态:
    执行push rdi后,RSP减少8字节,变为 16n - 16,此时RSP恢复16字节对齐。

  3. push rsi后的栈状态:
    执行push rsi后,RSP再减少8字节,变为 16n - 24,此时RSP模16余8,再次进入未对齐状态。

  4. 调用atoi前的栈状态:
    随后执行mov rdi, [rsi]准备atoi的参数,紧接着执行call atoi。此时调用atoi前的RSP值为 16n - 24,不满足SysV ABI要求的16字节对齐条件。

结论

调用atoi函数之前,栈未对齐。

内容的提问来源于stack exchange,提问作者HERO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 03:47:49