首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C++程序访问ASM文件中的函数?

从C++程序访问ASM文件中的函数?
EN

Stack Overflow用户
提问于 2009-09-04 08:06:09
回答 3查看 2.8K关注 0票数 0

Over here我问过关于将ASM文件翻译成C语言的问题,从回应来看似乎没有合理的方法可以做到这一点。很好。因此,其中一个回复建议我只是按原样使用这些函数,并使用它来完成。听起来不错。

但是怎么做呢?

天啊,我已经试过我能想到的所有方法了!我正在使用微芯片牌单片机(PIC18F4480)和微芯片牌集成开发环境(MPLAB )和ASM文件是微芯公司创作的…所以你会认为我会找到一些方法来利用它们!到目前为止,根本没有任何运气。

我对ASM (汇编)一无所知。我用C++编写代码,坦率地说,这一点不会改变。必须有一种方法来访问Microchip ASM文件中的函数,而不需要用一种新语言重写所有代码。

如果有人想看一看,ASM文件和应用笔记是here

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-04 08:19:06

看看PIDInt.asm,从C/C++调用函数应该是相当简单的。首先,为变量定义中列出的所有内容声明外部变量:

代码语言:javascript
复制
extern unsigned char error0, error1; /* etc */

然后,为所有具有"Function:“注释的对象声明外部函数,不接受任何参数,也不返回任何结果:

代码语言:javascript
复制
extern void Proportional(); // extern "C" for C++

要调用其中一个变量,您需要填充输入变量,调用函数,然后读取输出变量。

票数 6
EN

Stack Overflow用户

发布于 2009-09-04 08:17:51

我希望您需要以某种方式从汇编代码构建一个对象(.o)文件,然后将您的C++文件与该对象文件链接起来。您可能需要将这些函数声明为extern "C"才能从C++调用它们。

不确定这里的细节,在C++和汇编之间的调用约定可能会有问题,特别是对于像PIC这样的微控制器。

您是否真的为微控制器使用了完整的C++功能集,即对象、虚拟函数、重载等?那是..。不错,但我认为大多数PIC开发仍然是纯C语言(当然还有汇编语言)。

票数 5
EN

Stack Overflow用户

发布于 2009-09-04 08:31:28

通常的方法是使用具有汇编程序和C/C++编译器的构建环境和工具。编译器(和汇编器)获取源文件并生成中间目标文件格式。在Microsoft Windows上,使用Microsoft Tools时,这些文件将是.obj文件。

然后使用链接器将.obj文件链接到单个应用程序二进制文件中,这些文件可能由多种语言生成- fortran、cobol、c++、c、objective-c、汇编等。

目标文件基本上是导出符号的集合,标记小的字节块和未解析的符号,标记在链接期间需要修补的字节块,以指向不同的目标文件中的某些内容。

现在,在我经历过的平台上,通常的问题是,c++编译器并没有考虑到任何类型的跨语言二进制兼容性。另一方面,C编译器则是。因此,c++编译器会生成高度损坏的符号,这些符号将有关参数和返回类型的各种信息合并到符号名称中。这种机制使得操作符重载成为可能。

不管怎么说,关键是,

  • 您需要构建asm文件。如果你没有汇编程序,那你就倒霉了。它可能需要来自与c/c++工具集相同的供应商,您需要告诉您的c++程序外部符号的名称。以兼容c语言的方式。这就是头文件通常的用途。

因此,创建一个头文件来保存pid代码的函数声明,并将如下内容放入其中:

外部"C“空PidMain(空);

现在,#将这个头文件包含在您的c++程序中,并确保汇编器生成的目标文件包含在您的环境链接步骤中,您应该是黄金级的。

这可能涉及到某种调用约定。有些环境对于推入堆栈的顺序和/或谁负责堆栈清理有不同的标准。大多数ms windows工具集至少支持__pascal和__cdecl调用约定,因此解密结果如下所示

外部"C“空__pascal PidMain(空);

我不知道在您的特定环境中是否有多个调用约定。所以我不知道这对我有多大帮助。我想祝你好运吧。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1377852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档