在CDECL调用约定中,可以重用推入堆栈的参数吗?

basdp

在GCCcdecl调用约定中,调用返回后,我是否可以依靠推入堆栈的参数相同?即使在混合使用ASM和C并-O2启用优化()的情况下?

大卫·沃尔弗德(David Wohlferd)

一言以蔽之:不。

考虑以下代码:

__cdecl int foo(int a, int b)
{
   a = 5;
   b = 6;
   return a + b;
}

int main()
{
   return foo(1, 2);
}

这产生了以下asm输出(与-O0编译):

movl    $5, 8(%ebp)
movl    $6, 12(%ebp)
movl    8(%ebp), %edx
movl    12(%ebp), %eax
addl    %edx, %eax
popl    %ebp
ret

因此,__cdecl函数很有可能足堆栈值。

甚至还没有计算内联或其他优化魔术的可能性,这些事情可能不会一开始就出现在堆栈中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果C ++使用cdecl调用约定,为什么godbolt显示在edi中传递的参数?

来自分类Dev

本机Nuget中的cdecl和stdcall调用约定

来自分类Dev

x86调用约定:堆栈传递的参数应该是只读的吗?

来自分类Dev

在 JavaScript 中,您可以推入自调用数组文字吗

来自分类Dev

Stringformatter可以重用参数吗?

来自分类Dev

是否可以重用堆栈中的值?

来自分类Dev

我可以在以后的itoa()调用中重用相同的缓冲区吗?

来自分类Dev

我可以重用参数实例从Spark中的聚合函数返回值吗?

来自分类Dev

我可以重用吗。Moq中的任何参数描述符

来自分类Dev

我可以重用参数实例从Spark中的聚合函数返回值吗?

来自分类Dev

可以在同一行中重用BASH行的第一个参数吗?

来自分类Dev

死信箱可以在Akka中重用吗?

来自分类Dev

了解调用约定和堆栈指针

来自分类Dev

我可以递归调用异步函数而不溢出堆栈吗?

来自分类Dev

我可以在Selenium-Java框架中将现有API重用/调用到Protractor框架中吗?

来自分类Dev

无法确定在FASM中调用`_getch`之前必须将什么内容推入堆栈

来自分类Dev

是否可以使用内联 ASM 计算 __cdecl 中的函数(变量)参数?

来自分类Dev

堆栈中的推入操作中的逻辑错误

来自分类Dev

使用基于堆栈的调用约定进行汇编函数调用

来自分类Dev

您可以在GraphViz中建立可重用的样式吗?

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

可以在多个查询中重用CQLinq代码吗?

来自分类Dev

带char的Pinvoke cdecl约定**

来自分类Dev

带char的Pinvoke cdecl约定**

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

我可以使用命名参数作为变量在python中调用函数吗?

来自分类Dev

在C ++中,函数的调用者可以确保其参数不会被修改吗?

来自分类Dev

我可以从javaFX中的setOnAction参数调用另一个类吗?

来自分类Dev

我可以重用ValueAnimator吗?

Related 相关文章

  1. 1

    如果C ++使用cdecl调用约定,为什么godbolt显示在edi中传递的参数?

  2. 2

    本机Nuget中的cdecl和stdcall调用约定

  3. 3

    x86调用约定:堆栈传递的参数应该是只读的吗?

  4. 4

    在 JavaScript 中,您可以推入自调用数组文字吗

  5. 5

    Stringformatter可以重用参数吗?

  6. 6

    是否可以重用堆栈中的值?

  7. 7

    我可以在以后的itoa()调用中重用相同的缓冲区吗?

  8. 8

    我可以重用参数实例从Spark中的聚合函数返回值吗?

  9. 9

    我可以重用吗。Moq中的任何参数描述符

  10. 10

    我可以重用参数实例从Spark中的聚合函数返回值吗?

  11. 11

    可以在同一行中重用BASH行的第一个参数吗?

  12. 12

    死信箱可以在Akka中重用吗?

  13. 13

    了解调用约定和堆栈指针

  14. 14

    我可以递归调用异步函数而不溢出堆栈吗?

  15. 15

    我可以在Selenium-Java框架中将现有API重用/调用到Protractor框架中吗?

  16. 16

    无法确定在FASM中调用`_getch`之前必须将什么内容推入堆栈

  17. 17

    是否可以使用内联 ASM 计算 __cdecl 中的函数(变量)参数?

  18. 18

    堆栈中的推入操作中的逻辑错误

  19. 19

    使用基于堆栈的调用约定进行汇编函数调用

  20. 20

    您可以在GraphViz中建立可重用的样式吗?

  21. 21

    可以在多个查询中重用CQLinq代码吗?

  22. 22

    可以在多个查询中重用CQLinq代码吗?

  23. 23

    带char的Pinvoke cdecl约定**

  24. 24

    带char的Pinvoke cdecl约定**

  25. 25

    在C ++中,函数的调用者可以确保其参数不会被修改吗?

  26. 26

    我可以使用命名参数作为变量在python中调用函数吗?

  27. 27

    在C ++中,函数的调用者可以确保其参数不会被修改吗?

  28. 28

    我可以从javaFX中的setOnAction参数调用另一个类吗?

  29. 29

    我可以重用ValueAnimator吗?

热门标签

归档