c - C中堆栈上数据的组织?

标签 c function

我正在学习C语言,有一些疑问。 当我们声明一个变量时,比如 int i = 0i 有堆栈中的地址,对吧?

我想知道函数在内存中是如何组织的。例如,我有一个函数:

int myF() {
  int x = 2, y = 3;
  int z = x + y;
  return x;
}

这个方法在栈中是如何组织的?我的意思是名称“myF”也像其他变量一样具有内存地址?而“myF”应该有类似结束地址的东西来指示函数的结束位置在哪里?

我错了吗?

非常感谢。

最佳答案

图表将有助于展示它是如何组织的:

Stack layout

  • 局部变量(如示例中的 i)可能在堆栈上,但这取决于编译器。典型的堆栈布局会显示局部变量区域,但例如,某些编译器可能会使用寄存器代替变量。
  • 名称myF 没有地址,但函数有。该地址通常位于可执行代码的单独区域。
  • 没有“结束地址”——调用函数保存返回地址。当 myF 到达函数末尾并正在执行任何清理操作时,它将分支到返回地址。这实际上可能是一个问题,因为有一些漏洞试图更改此返回地址并导致代码分支到要执行的恶意代码。

关于c - C中堆栈上数据的组织?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5195669/

相关文章:

c - strtoul 给出意外的输出

javascript - 我正在创建一个代码来根据一天中的时间向我打招呼,由于某种原因,它无法将我的名字与其他文本区分开来

function - 调用数组中所有元素的函数

python - 哪个更可取使用 : lambda functions or nested functions ('def' )?

python - python中的类和方法

objective-c - 多个值的一个标识符。是否可以?

c - 为什么 accept() 系统调用在关闭前一个连接套接字之前不接受新连接

c - 是否可以从 erlang 节点启动外部二进制应用程序?

c - 位运算计算奇偶校验的最快方法是什么?

c - 我如何制作一个可以从 Lua 调用的 C 函数?