问题标签 [abi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - glibc:elf 文件操作系统 ABI 无效
下载并编译 glibc-2.13。当我尝试运行一个执行 malloc() 的示例 C 程序时。我收到以下错误
elf file OS ABI invalid
任何人都可以通过我的任何指针来帮助解决这个问题。请注意我的内核版本是 linux-2.6.35.9
c++ - 添加私有成员变量如何破坏 C++ ABI 兼容性?
pimpl习惯用法通常用于允许更改动态链接库中的代码,而不会破坏 ABI 兼容性并且不必重新编译依赖于库的所有代码。
我看到的大多数解释都提到添加新的私有成员变量会更改类中公共和私有成员的偏移量。这对我来说很有意义。我不明白的是,这实际上是如何破坏依赖库的。
我已经阅读了大量关于 ELF 文件以及动态链接实际上是如何工作的内容,但我仍然看不到更改共享库中的类大小会如何破坏事情。
例如,这是我编写的一个测试应用程序 (a.out),它使用Interface::some_method
来自测试共享库 (libInterface.so) 的代码 ():
调用some_method
使用程序链接表(PLT):
随后转到包含地址 0x804a01c 的全局偏移表 (GOT):
然后这就是动态链接器发挥其魔力的地方,并查看 LD_LIBRARY_PATH 中共享库中包含的所有符号,Interface::some_method
在 libInterface.so 中找到并将其代码加载到 GOT 中,因此在随后的调用中some_method
,GOT 中的代码实际上是共享库中的代码段。
或类似的规定。
但是鉴于上述情况,我仍然不明白共享库的类大小或其方法偏移如何在这里发挥作用。据我所知,上述步骤与班级规模无关。看起来只有库中方法的符号名称包含在 a.out 中。当链接器将代码加载到 GOT 中时,类大小的任何更改都应该在运行时解决,不是吗?
我在这里想念什么?
linux - 构建现代 (4.x) GCC 以在与主机相同的架构上定位 2.4.x 内核?
问题相对简单:我如何构建 4.x 系列的 GCC(以及 binutils 和朋友),它以 2.4 ABI 为目标,与编译器的主机在同一架构上?
主机系统将是 x86 或 x86_64,唯一的要求是只要 ABI 匹配,构建的 ELF 文件就可以在旧内核上运行。(内核源/头文件存在)
为了链接它,还需要兼容的 libc。但是,我也可以动态链接它,因为我知道 (g)libc 版本。
任何指针将不胜感激。我对crosstool-ng有点熟悉,但这似乎不再支持 2.4 内核(原因很明显)。
linux-kernel - Linux内核中的ARM寄存器r9
“ARM 体系结构过程调用标准”(AAPCS/EABI)声明(5.1.1)
但
问题是:Linux 内核是否将 r9 用于某些特殊目的?还是用作普通的非易失性寄存器?
c++ - Gcc x64 函数调用
据我所知,x64
代码有两种可能的调用约定 -Microsoft x64
和AMD64
.
现在,gcc
可以使用参数启动,如果我们使用调用约定-mregparm=0
,这将不起作用。发生这种情况是因为约定要求对前 6 个变量使用寄存器(我不太确定为什么要这样做,但我怀疑它是由于可能存在堆栈安全问题而实现的)。AMD64
AMD64
所以,这里有一个问题:
在按照约定编译使用时是否有一些像这样的严格规则(强制寄存器使用)?而且,如果是,如何在不破坏兼容性的情况下绕过它们?gcc
Microsoft x64
ABI
linux - “CXXABI_x.y”是什么意思?
我的 RPM 包在其依赖项列表中有这个:
括号中的字符串是什么意思?如果是 ABI 版本,如何更改、替换或删除依赖项?
macos - 是否可以仅在 Mac OS X 上使用 GNU Assembler 生成纯二进制文件?
我为 x86 编写了一些汇编代码,并希望仅使用 Mac 的默认汇编程序('as')将其汇编成普通的二进制文件(不是 Mach-O)。经过几次谷歌搜索和尝试,我失败了。
虽然我知道如何使用 NASM(使用选项:-f 二进制)来做到这一点,但我不想这样做。因为我的代码是用写的,而且我习惯了 AT&T 的语法。
arm - ARM ABI 和 EABI 的用途是什么?
我看这个 PDF(ARM 架构的应用程序二进制接口:基本标准)越多,我就越不明白它的含义。另外,我想对Procedure Call Standard for the ARM Architecture和ELF for the ARM Architecture发表一些评论。
iphone - ABI 引用以 clang 链接错误“未定义符号”结束,但 GCC 可以链接吗?
我希望将一个库集成到我的 iphone 项目中。库源提供了一个使用 LLVM-GCC 构建 .a 的 makefile。我使用 clang 来构建我的应用程序。
当我在 xcode 下构建我的应用程序时,将我自己的源代码与 .a 链接起来,LLVM-GCC 成功构建并链接了我的项目,但在链接时出现了 clang 失败并出现此错误:
架构 armv7 的未定义符号:“___aeabi_idiv”
ld:未找到架构 armv7 的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
有谁知道问题的根源?我认为与 clang 相关的 ABI 没有实现 ARM 部门,而 GCC 使用另一个 ABI 来实现它。
我还没有低级优化编译的经验,所以任何人都可以帮助我理解这个问题吗?
我该如何解决这个问题以使用 clang 构建我的应用程序?
c - 在 X86 上使用 C 或 C++ 为通用 ARM 环境编程
我正在寻找一种解决方案来开始我的 ARM 世界之旅,我想使用 C 作为我的主要语言,我想使用标准 I/O 库为这个环境创建一个基本程序。
此外,是否有一个模拟器或类似的东西可以在基于 X86 的 PC 上运行?我可以在这种模拟器上尝试一些操作系统,比如 Debian for ARM?
谢谢。