2011-09-16 25 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開始。