【问题标题】:C++ How to call code with unsupported calling conventionC ++如何使用不受支持的调用约定调用代码
【发布时间】:2011-11-18 14:16:24
【问题描述】:

我有一个 x86 DLL(我没有源代码),我需要从 C++ 程序 (VC++ 10) 调用它。

我被告知调用约定是从左到右的,前三个参数在 EAX、ECX 和 EDX 寄存器中传递,并且被调用者堆栈清理(以及浮点参数/返回等其他细节)。

是否有某种方法可以自动执行此操作(例如,从包含数百个函数定义中的每一个的文件生成,或者更好地“告诉”编译器有关约定),以便我可以正常调用这些函数?如果有帮助的话,使用的类型都是不错的简单类型(void、int、char*、float 等)。

【问题讨论】:

  • 澄清一下,自定义进入和退出代码 = 您自己的汇编代码,从受支持的调用约定适应到不受支持的调用约定。
  • 那是在你到达那里之后在被调用函数中做一些事情吗?但我需要在呼叫现场做点什么?
  • 到达那里之后,理论上您可以操作寄存器和堆栈,以便在被调用函数运行时(即紧随其后),它会根据需要找到它们。与操纵调用约定没有概念上的区别。

标签: c++ visual-c++ x86 calling-convention


【解决方案1】:

我会先查看libffi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    相关资源
    最近更新 更多