2011-09-16 28 views
4

我有一个86 DLL(而我没有源),我需要从一个C++程序(VC++ 10)调用的代码。C++如何调用不支持的调用约定

我被告知调用约定是从左到右的,前三个参数在EAX,ECX和EDX寄存器中传递,被调用栈清理(以及其他细节,如浮点型参数/返回等)。是否有一些方法可以自动执行此操作(例如,从包含几百个函数定义中的每个函数定义的文件生成,或者甚至更好地“告诉”编译器关于约定),以便我可以像通常那样调用这些函数?如果有帮助的话,所使用的类型都是很好的简单类型(void,int,char *,float等)。

+0

的可能重复[有没有编译器功能,注入自定义函数入口和出口的代码?](http://stackoverflow.com/questions/1472769/is-there-a-compiler-feature-to-inject-custom - 功能进入并退出代码) – Jon

+1

为了澄清,自进入和退出代码=从支持到不支持的调用约定适应自己的汇编代码。 – Jon

+0

那么在你到达那里之后在被调用的函数中做了什么?但我需要在呼叫站点上做些什么? –

回答

2

我想通过看libffi开始。