注册 登录
编程论坛 汇编论坛

一个BYTE引发的疑问

bingghost 发布于 2012-11-04 02:49, 520 次点击
蛋疼  发帖砸不成功呢  不允许上传附件为0....  俺就传了几张图片呀

------------------------------------------------------------------------------
首先编写代码如下
只有本站会员才能查看附件,请 登录

程序挂掉,运行的结果好像也不是我预期的值--于是OD载入
只有本站会员才能查看附件,请 登录

发现多了一个push 0,于是单步走
只有本站会员才能查看附件,请 登录

在走发现神奇了,栈好像不是模4地址了
只有本站会员才能查看附件,请 登录

于是感觉这不科学啊
只有本站会员才能查看附件,请 登录

VC6.0 编写C代码如下
只有本站会员才能查看附件,请 登录

反汇编查看
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录


于是感觉ml的处理方式好像不科学啊
4 回复
#2
bingghost2012-11-04 02:58
额 有人看电影把网速全部占用了  叫他限速了下  于是上传成功了
---------------------------------------------------------------------

于是小小的修改了一下代码把SBYTE全部修改为BYTE
只有本站会员才能查看附件,请 登录

程序好像没有挂了
于是在OD载入
只有本站会员才能查看附件,请 登录

发现又多了一个push 一共3个push0
于是猜测,是否是因为BYTE 才多产生了一个push 0
于是在小小的把BYTE 全部修改为SBYTE
只有本站会员才能查看附件,请 登录

好像程序又没有挂
于是在OD载入
只有本站会员才能查看附件,请 登录

于是发现好像没有产生多余的push 0了


于是疑问产生了  BYTE类型压参时为何要push 0一下呢
???????????????????????????????????????????????
期待高人的解答




#3
zklhp2012-11-04 10:26
可能是bug罢 API压栈都是压的32位数 所以正常情况下没有这个问题 可能宏在压非32位的时候有bug
#4
有容就大2012-11-04 10:52
表示学习 去研究下
#5
bingghost2012-11-04 12:10
以下是引用zklhp在2012-11-4 10:26:47的发言:

可能是bug罢 API压栈都是压的32位数 所以正常情况下没有这个问题 可能宏在压非32位的时候有bug
在zk大大的指点下  俺于是测试 有无宏的情况
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

咿呀好像还真不一样啊  难道真的是有无宏的情况么?
于是在进行测试
只有本站会员才能查看附件,请 登录

于是发现不是宏引起的  
调用约定一样 参数类型一样 咋生成的代码就不一样呢?
突然恍然大悟   printf是变长参数
于是  把_test也修改成变长参数   于是 一样了
只有本站会员才能查看附件,请 登录
1