麦芽糖 发表于 2015-4-13 16:34:23

这个要看实际函数的调用约定方式,通常的stdcall,cdecl,还有参数的次序和约定也有关,具体可以baidu下.
常见的stdcall约定是函数内部负责清理栈,也就是上面说的 看RET0xNum ,0xNum / 0x04就是push进来的参数个数.
象cdecl他是函数完成调用负责清理栈,也就是上面说的add esp,0xNum,同理 0xNum / 0x04就是push进来的参数个数.这个为什么要这样的做很简单,不是优化原因,举个例子,例如泛型的参数,实际函数并不知道会用到多少个参数,所以要函数调用完成后清理栈,
还有特殊的约定,象pascal,主要是delphi写的游戏,传奇这类老游戏会碰到,他是第1个参数 放在EAX第二个参数 放在EDX,第3个参数放在ECX,第4个参数开始PUSH,依次类推.
其他就不展开了

13709308011 发表于 2015-4-14 18:14:44

感谢楼主的无私的分享与奉献.

qq870337957 发表于 2015-4-15 06:10:46

我飘过一下 赚一个海币

xl58 发表于 2015-4-16 22:40:25

楼主很给力哈,在此代表需要的人对楼主表示无尽的感激之情

Mangosoft 发表于 2015-4-29 09:25:57

好腻害的样子
页: 1 [2]
查看完整版本: 怎样判断 一个CALL 需要几个参数呢