驱动之路 __stdcall__cdcel调用约定
先来了解一下__stdcall__cdcel调用约定
在来了解一下C和C++编译方式的不同
c编译器方式编译默认的是__cdcel调用约定,比如:
void a(int a,int b)
{...}
push b
push a
call _a
add esp,8//esp是栈顶指针
__stdcall调用约定,比如:
push b
push a
call _a@8 这个函数内部会自动还原堆栈ret 8
上面是C编译器编译2种不同约定生成的命名
c++编译器方式编译默认的是__stdcall调用约定,比如:
void a(int a,int b)
{...}
push b
push a
call _a@ZH8AS //反正后面一大堆符号,这个函数内部会自动还原堆栈ret 8
如果要用C++编译器编译一个函数或者一个变量用C的编译方式来命名的话,得加一个extern "C" 关键字,意思就是,以C的编译方式来命名
extern "C" void a(int a,int b)
{...}
push b
push a
call _a@8 这个函数内部会自动还原堆栈ret 8

浙公网安备 33010602011771号