也不知道怎么了,最近想搞搞这个东西,嘿嘿,,可能觉得某些方面对速度要求不高的用c/c++就可以了且很方便,可对速度要求高的用汇编来实现也是个不错的选择。。而通常情况下,这两条都希望有,所以想到了交叉编译,当然写成DLL形式再接口调用也未尝不可,只是有时希望整合一下,嘿嘿。。。。罗嗦了吧,哈哈,下面开始吧。
说明:
1.调用约定
统一采用_stdcall方式压栈,通常用于Win32 Api中,函数采用从右到左的压栈方式,
自己在退出时清空堆栈。VC将函数编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。
比如:int f(void *p) 编译后为 _f@4(在外部汇编语言里可以用这个名字引用这个函数)
2.名字修饰约定
C或者C++函数在内部(编译和链接)通过修饰名识别。修饰名是编译器在编译函数定义或者原型时生成的字符串。
修饰名由函数名、类名、调用约定、返回类型、参数等共同决定。
a、C编译时函数名修饰约定规则:
__stdcall调用约定决定了在输出函数名前加上一个下划线前缀,后面加上一个“@”符号和其参数的字节数,
b、C++编译时函数名修饰约定规则:
通过extern "C"强制采用C编译时的函数名修饰约定规则a。
3. 以下程序均以上面两条约定方式、windows vc6.0包 环境实现,其他方式也未尝不可,只是这种方式用的多一点吧。。
C/C++调用汇编函数
也不想多说什么,给个具体的例子吧
我们要通过C/C++来调用下面的汇编函数GetArgument PROC a:DWORD