1、关于 wsprintf 函数

作者在 2008-07-18 22:17:50 发布以下内容
    在学习Win32汇编的过程中,发现一个有趣的现象:
    在使用wsprintf这个函数的时候,反汇编到调用这个函数的代码处,发现其后总是跟着这样的指令:add,esp,0000000c ,这里的0000000c (会随着参数的个数发生变化)其实就是12个字节,正好是传递给wsprintf函数的3个参数曾经使用的栈空间值.这条指令等于是把wsprintf的参数都扔掉了(主动清除堆栈)。
这条指令是谁设的呢?编译器!
文章评论,共3条
missiyou
2008-07-20 14:51
1
这个呀,编译器问题。应该在出栈之前  add ,esp 0000000c;
你们都要疼我哦
2008-07-21 23:27
2
调用约定.汇编是STDCALL.不过wsprintf函数好象是特别的.具体忘了
missiyou
2008-07-22 13:58
3
我查了资料,知道了,这个是按__cdecl调用约定<br />
参数按右到左传递。<br />
push par3<br />
push par2<br />
push par1<br />
call test1<br />
add esp,oc;函数外平衡堆栈<br />
另外如 PASCAL&nbsp;&nbsp;__stdcall <br />
都是函数内平衡堆栈。<br />
呵呵,查的相关资料
游客请输入验证码