相关疑难解决方法(0)

132
推荐指数
4
解决办法
10万
查看次数

堆栈如何在汇编语言中工作?

我目前正在尝试理解堆栈是如何工作的,所以我决定自学一些汇编语言,我正在使用这本书:

http://savannah.nongnu.org/projects/pgubook/

我正在使用Gas并在Linux Mint上进行开发.

我有点困惑:

据我所知,堆栈只是一个数据结构.所以我假设如果我在汇编编码我必须自己实现堆栈.然而,这似乎并非如此,因为有像这样的命令

pushl
popl
Run Code Online (Sandbox Code Playgroud)

因此,当在x86架构的汇编中编码并使用Gas语法时:堆栈只是已经实现的数据结构吗?或者它实际上是在硬件级别实现的?或者是别的什么?其他芯片组的大多数汇编语言也已经实现了堆栈吗?

我知道这是一个愚蠢的问题,但实际上我很困惑.

assembly stack

71
推荐指数
5
解决办法
10万
查看次数

x86_64:堆栈帧指针几乎没用?


  • Linux x86_64.
  • gcc 5.x

我正在研究两个代码的输出,使用-fomit-frame-pointer和without(gcc at"-O3"默认启用该选项).

pushq    %rbp
movq     %rsp, %rbp
...
popq     %rbp
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如果我全局禁用该选项,即使是在极端情况下编译操作系统,是否有一个问题?

我知道中断使用该信息,那么该选项仅适用于用户空间吗?

c assembly gcc x86-64 stack-frame

13
推荐指数
1
解决办法
2588
查看次数

标签 统计

assembly ×3

x86-64 ×2

abi ×1

c ×1

gcc ×1

linux ×1

stack ×1

stack-frame ×1

unix ×1