永发信息网

关于不定参函数参数个数问题

答案:2  悬赏:80  手机版
解决时间 2021-05-07 13:38

怎样得到可变参数个数?
归纳起来有三种办法:
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应该从堆栈里面取出多少个参数呢?

最佳答案

不知道你用的编程语言是什么。


我是学Java的,可变参数是可以用foreach来遍历的。


想要确定参数个数,可以在遍历中声明变量i++来确定。


不知道对你有没有帮助

全部回答

可以用判断取反操作,这个方法可以在不确定的前提下进行测试。

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
屁股为什么会隔几天就痛啊?
QQ三国的角色密码忘了,要怎么样,才能开?
一个人的圣诞节怎么过?
我看一个女生不爽
如何选择壁纸颜色搭配,美式风格墙纸特点有哪
幸福是什么样?
电脑高手进 看看这台电脑配置怎么样?
怎样与二年级的孩子做家庭游戏
穗华名郡这个地址在什么地方,我要处理点事
男生为什么会吃醋
仙剑5什么时候才可以下载?
扬州地区请帮忙推荐女生用的千元手机?
问问里的学而不倦任务要完成多少次
谁有WWE Randy Orton VS John Cena的视频!?
如何区别对联的上下联
推荐资讯
厨师穿越古代耽美文,描写飞机穿越云里的诗句
发个笔刷给我 谢谢
220/280V 6000A的空气开关在多少W的时候跳闸
容易过敏的人应该多吃什么?
寻:哪些诗词中
爱上一个不爱自己的人和失去一个自己爱的人,
如何购买到正版的台服星际争霸2的CD Key?
暴风第6人的任务第11个怎么完成?
请问梦幻西游谁在深圳一区金沙湾玩的?
《仙剑奇侠传》的5颗灵珠是?
诛仙2 佛鬼道为什么省钱?
一道初二的数学难题!
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?