为什么静态函数有时具有非标准堆栈框架



在wikibook x86 Disassembly中,有人写道,有时有些子程序不设置标准堆栈框架。一个这样的例子是当我们在C中声明一个静态函数时。书中已经写了以下几行。

CCD_ 2。

关于上述声明,我有以下问题:

  1. 外部函数是否可以使用函数指针引用静态函数?如果是,如何?为什么允许?(我之所以这么问,是因为据我所知,静态函数具有本地作用域,任何外部函数都无法访问)
  2. 拥有非标准堆栈框架意味着什么?非标准堆栈框架与标准堆栈框架有何不同?欢迎使用程序集代码进行解释:)

编辑:我想回答的另一个问题是:为什么在上面提到的情况下,编译器设置了非标准堆栈帧而不是标准堆栈帧?

  1. 当然,只要它是同一个翻译单元中的另一个函数,就可以将指针指向静态函数,并将其提供给不同翻译单元的代码。毕竟,函数在的某个地方。使其成为static可以防止其他对象找到它,但这并不妨碍它们被递给它
  2. 例如,没有参数推送或弹出,或者返回值存储在编译器喜欢的任何地方。基本上,介于标准调用约定和内联函数体之间。尽管内联函数体是最有可能的结果

最新更新