正在阅读:DLL中调用约定和名称修饰(一)DLL中调用约定和名称修饰(一)

2004-03-04 10:28 出处:CSDN 作者:rivershan 责任编辑:linjixiong


  函数调用处反汇编代码如下:

  ;Add(1,2);

  push 2 ;参数从右到左入栈,先压入2

  push 1 ;压入1

  call @ILT+0(Add) (00401005) ;调用函数实现

  add esp,8 ;由函数调用清栈

  2、__stdcall

  __stdcall调用约定用于调用Win32 API函数。采用__stdcal约定时,函数参数按照从右到左的顺序入栈,被调用的函数在返回前清理传送参数的栈,函数参数个数固定。由于函数体本身知道传进来的参数个数,因此被调用的函数可以在返回前用一条ret n指令直接清理传递参数的堆栈。__stdcall可以写成_stdcall。

还是那个例子,将__cdecl约定换成__stdcall:

  int __stdcall Add(int a, int b)

  {

  return (a + b);

  }

  函数调用处反汇编代码:

  ; Add(1,2);

  push 2 ;参数从右到左入栈,先压入2

  push 1 ;压入1

  call @ILT+10(Add) (0040100f) ;调用函数实现

  函数实现部分的反汇编代码:

  ;int __stdcall Add(int a, int b)

  push ebp

  mov ebp,esp




察看评论详细内容 我要发表评论
作者笔名简短内容 发表时间
:

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品