繁体   English   中英

了解一些汇编代码

[英]understanding some assembly code

我正在尝试学习一些汇编代码,所以我在一些教程中读到了该汇编代码

int proc(void)
  {
      int x,y;
       scanf("%x %x", &y, &x);
       return x-y;
   }

1   proc:
2     pushl  %ebp
3     movl  %esp, %ebp
4     subl   $40, %esp
5     leal  -4(%ebp), %eax
6     movl  %eax, 8(%esp)
7     leal  -8(%ebp), %eax
8     movl  %eax, 4(%esp)
9     movl  $.LC0, (%esp)
10    call  scanf
 Diagram stack frame at this point
11    movl  -4(%ebp), %eax
12    subl  -8(%ebp), %eax
13    leave
14    ret

如果我很了解,第5至8行的指令将存储一些地址,这些地址将用于存储scanf的输入值。 因此,可以说scanf系统地使用地址%esp加上一定数量的字节(取决于输入的sizeof )来获取将存储数据的地址吗?

这里发生的是建立了一个堆栈框架以将参数传递给scanf subl用于为新的堆栈帧分配空间, movl与堆栈指针%esp偏移量一起使用,以将参数的值写入新分配的堆栈帧。

这里可以找到有关x86调用约定(尤其是cdecl)的更详尽的解释。 了解堆栈框架和cdecl约定的高级结构将帮助您理解此代码段的意图。

scanf调用约定为cdecl 它将参数传递给esp指向的堆栈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM