为发送到方法的参数分配的大小

时间:2011-10-20 12:30:18

标签: c++ windows parameters memory-management

如果我知道它的帧指针和返回地址,有没有办法知道发送给函数的参数的分配空间大小是什么?
(最好不使用调试符号)

3 个答案:

答案 0 :(得分:2)

一般来说,没有。首先,你不知道调用约定,所以你不知道参数是如何传递的,以及谁应该清理它们。即使你确实知道召唤惯例,我也不相信有一种简单的方法可以确定你的要求。

答案 1 :(得分:0)

你通常会看到像

这样的功能
myFunction(char* buffer, int bufferSize, ...) { ... }

不将大小作为第二个参数(或在结构中)发送,您无法确定分配的空间。但如果这是一个字符串或另一个具有重要分隔符的字节数组,则可以检查大小(而不是分配的空间)。

编辑:要获取参数大小,您需要使用va_listva_startva_argva_end库函数。

http://www.cplusplus.com/reference/clibrary/cstdarg/va_list/

答案 2 :(得分:0)

如果所有数据都在堆栈上分配,那么对于函数foo(par1,par2,...,par10),参数par1,...,par9的大小应为((long)& par10) - ((长)& par1)。

您可以在参数列表的末尾添加一个虚拟参数,这样您就可以确定所有实际参数的大小。