vararg 函数如何找出机器代码中的参数数量?

2023-12-19

可变参数函数如何printf找出他们得到的论点数量?

参数的数量显然没有作为(隐藏)参数传递(请参阅在这里调用 asm 示例中的 printf http://www.cs.umbc.edu/portal/help/nasm/sample.shtml#printf1).

有什么窍门呢?


诀窍在于你以其他方式告诉他们。为了printf您必须提供一个格式字符串,其中甚至包含类型信息(尽管这可能不正确)。提供此信息的方式主要是用户契约,并且经常容易出错。

至于调用约定:通常将参数从左到右压入堆栈,最后返回跳转地址。调用例程清除堆栈。因此,被调用的例程没有技术需要知道参数的数量。

编辑:在 C++0x 中,有一种安全的方法(甚至类型安全!)来调用可变参数函数!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vararg 函数如何找出机器代码中的参数数量? 的相关文章

随机推荐