怎样得到可变参数个数?
归纳起来有三种办法:
1:函数的第一个参数,指定后续的参数个数,如func(int num,...)
2: 根据隐含参数,判断参数个数,如printf系列的,通过字符串中%的个数判断
3: 特殊情况下(如参数都是不大于0xFFFF的int),可以一直向低处访问堆栈,直到返回地址,
也可以检查读到的数据,如果大于0x10000,可以检查其地址的内存访问属性判断,比如是可执行(汗。。。有必要这样吗?万一参数传错了)
以上是我复制的内容,关于最后一条,什么叫做向低处访问堆栈,直到返回地址
据我所知
一个 int _cdecl func( int a , int b );
压栈顺序为 b , a , 函数返回地址 , 最后还压了一个什么我忘了
然后调用函数的时候
call func
func 就从堆栈中取出 [ebp+8] ( 对应 a ) , [ebp+12] ( 对应 b ) 进行处理
以上是定参函数的调用
但是不定参函数的话
我怎么知道func应该从堆栈里面取出多少个参数呢?