mxj
mxj
驱动牛犊
驱动牛犊
  • 注册日期2001-04-19
  • 最后登录2003-08-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1575回复:8

关于stdcall&cdecl的问题,请明白人解惑。

楼主#
更多 发布于:2001-12-09 13:41
被调用者清除(堆)栈和调用者清除(堆)栈
他们到底有什么区别。
NEAR和FAR到底有什么区别。
谢谢。
soso
驱动牛犊
驱动牛犊
  • 注册日期2001-08-22
  • 最后登录2008-10-16
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望5点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-10 05:04
好好地看一看C语言吧,如果可能在看一看ASM都是很有用的。

用容乃大,无欲则刚
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-12-10 09:32
看看MSDN吧!
System Internals http://sys.xiloo.com
Nouk
驱动中牛
驱动中牛
  • 注册日期2001-08-22
  • 最后登录2006-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-10 10:06
stdcall & cdecl are calling conversion...
you can reference by MSDN
Taiwan's Driver Developer
BSOD
驱动牛犊
驱动牛犊
  • 注册日期2001-09-28
  • 最后登录2004-09-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-12-10 13:36
If you know assembly, I would suggest you to turn on the /Fa switch (assuming you\'re using MS VC++), then read the assembly code generated by the compiler, you\'ll get the answer for __cdecl, __stdcall and fastcall.
COOL NDIS
pango99
驱动牛犊
驱动牛犊
  • 注册日期2001-08-21
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望20点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-12-10 23:46
这和函数参数有关,被调用者清除堆栈,主程序调用完函数后,就不用POP参数所占用的堆栈空间,否则,主程序要自己POP掉参数所占用的堆栈空间,举个例子:

函数A(int i)自己清除堆栈,主程序代码:
push 10
call a

函数A(int i)不自动清除堆栈,主程序代码:
push 10
call a
pop eax //一定要有这行代码,否则会产生堆栈指针错误
Tomgin
驱动牛犊
驱动牛犊
  • 注册日期2001-08-08
  • 最后登录2005-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-12-11 12:01
CDECL 是使用 C 语言的调用规范。他的调用速度要比 PASCAL 的调用规范慢。
因为在生成汇编代码后 CDECL 比 PASCAL 多一条汇编指令。
CDECL 参数压栈是从左到右,PASCAL 是从右到左。
所以 CDECL 可以实现可变参数。而 PASCAL 不能。

STDCALL 是 CDECL 和 PASCAL 混合,他的参数压栈是从左到右,清除参数压栈用 PASCAL 方式。


努力呀,还有许多东西不会呢。
xqchen
驱动牛犊
驱动牛犊
  • 注册日期2001-09-07
  • 最后登录2004-12-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-12-13 03:37
stdcall:
1. Stack: Called funtion pops up its own arguments
2. Name-decoration: _xxx@??

cdel:
1. Stack: Calling funtion pops up the arguments
2. Name-decoration: _xxx

from MSDN.

You\'ll care about them when you\'re program mixed C&Assembler, or you\'re trying to use some library with your own built header file
sunwang
驱动牛犊
驱动牛犊
  • 注册日期2001-05-09
  • 最后登录2001-12-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-12-13 14:56
_cdecl:Vxd例程默认的类型;

_stdcall:Kmd,Wdm默认的类型;
^十万就结婚^
游客

返回顶部