from http://zerray.com/
记得看win32asm教程的时候,里面提到win32只使用stdcall约定,即参数由右向左压入堆栈,恢复堆栈的工作交给被调用者。但同时还提到有一个函数例外,wsprintf,因为它的参数个数是不确定的。原来一直没有用过这个函数,就没注意了。今天用了一下,发现也不用自己恢复堆栈啊,只要简单的
invoke wsprintf, OFFSET szBuf, OFFSET szFmt, ...
就OK了,并不用在后面加上add esp, xx,为什么呢?把程序反汇编了一下,恍然大悟!原来是编译器帮我搞定了,自动的加上了add esp, xx一句。如果自己再写add esp, xx就是画蛇添足了。
博客提到win32asm教程中,win32用stdcall约定,参数右向左入栈,被调用者恢复堆栈,但wsprintf参数个数不确定。作者使用该函数时发现不用自己恢复堆栈,反汇编程序后发现是编译器自动添加了恢复堆栈的语句。
674

被折叠的 条评论
为什么被折叠?



