abi相关内容

ARM-OABI 上 syscall() 的实现.什么是“svc #0x900071"?

我了解到系统调用号是作为 ARM OABI(旧应用程序二进制接口)上的“svc(或 swi)"指令的直接操作数传递的.立即数操作数为“0x900000+(系统调用次数)" 例如,发出EXIT系统调用如下. svc #0x900001 @ sys_exit 我对 syscall() 函数的实现感到好奇,因为 sycall() 将系统调用号作为其参数.我猜 syscall() 的二进制代码不能轻易 ..
发布时间:2021-09-04 18:42:08 服务器开发

通过 DLL/SO 边界传递异常

我试图找到编译器功能,如果共享库使用不同于可执行文件的标准库的标准库编译,则加载共享库.我知道标准库的ABI 没有标准化,但我可以使用自己的基类来处理所有异常. 我发现异常处理 ABI 在 Linux 上标准化(安腾 C++ ABI:异常处理),和在 Windows 上(x64 异常处理). 据我所知,数据对齐也标准化了(System V 应用二进制接口 AMD64 架构处理器补充,x ..
发布时间:2021-07-23 20:21:51 C/C++开发

System V amd64 如何处理很长的返回值?

我正在简要研究用于 amd64/x86-64 架构的 System V ABI,并且很好奇它如何处理超过 128 位的返回值,其中 rax 和 rdx还不够. 我在 Ubuntu 18.04 64 位(更一般地说,任何符合 amd64 POSIX 的系统)上编写了以下 C 代码: struct big {长长 a, b, c, d;};struct big bigfunc(void) {结 ..
发布时间:2021-07-09 20:51:28 其他开发

C++ + gcc:尾部填充重用和 POD

相关问题:标准布局和尾部填充 片段: #include #include 结构体A0{一个;字符 c;};结构 B0 : A0{ 字符 d;};结构体A1{一个;私人的:字符 c;};结构 B1 : A1{ 字符 d;};结构体A2{私人的:一个;字符 c;};结构 B2 : A2{ 字符 d;};int main(){std::cout ::value ..
发布时间:2021-06-13 19:53:36 C/C++开发

了解堆栈对齐实施

考虑以下C代码: #includevoid func(void){uint32_t var = 0;返回;} GCC 4.7.2为上述代码生成的未经优化的(即 -O0 选项)汇编代码为: func:Pushl%ebpmove%esp,%ebpsubl $ 16,%espmovl $ 0,-4(%ebp)p离开退回 根据 System V ABI 的堆栈对齐要求 ..
发布时间:2021-05-09 20:55:01 其他开发

RISC-V呼叫约定的ABI注册名称

我对RISC-V ABI寄存器名称感到困惑.例如,第85页的"RISC-V指令集手册,第I卷:用户级ISA,版本2.0"中的表18.2指定堆栈指针 sp 是寄存器 x14 .但是,说明 addi sp,zero,0 riscv64-unknown-elf-as将 编译为0x00000113( -m32 没有区别).二进制: 000000000000 00000 000 00010 0 ..
发布时间:2021-04-24 21:09:48 其他开发

记住x86-64 System V arg寄存器顺序的最佳方法是什么?

我经常忘记在系统调用中需要用于每个参数的寄存器,每次我忘记访问 rep 实际的设计过程包括最小化在使用当时最新的GCC AMD64端口进行编译时(也许是SPECcpu)的指令数量和代码大小之间的成本权衡.我不知道作为 rep movsb 的 inline memcpy是否相关,或者当时的glibc是否实际上以这种方式实现了它,或者是什么. 我在 ..
发布时间:2021-04-24 21:09:02 其他开发

C编译器可以生成指针为32位的可执行64位吗?

大多数程序都适合4 GB以下的地址空间,但是需要使用x64架构上可用的新功能. 是否有可以使用x64寄存器和特定指令但保留32位指针以节省内存的编译器/平台? 是否可以在旧代码上透明地做到这一点?用什么开关可以做到这一点? OR 在保留32位指针的同时,必须获得64位功能的代码有什么变化? 解决方案 一种简单的规避方法是,如果您要指向的结构只有很少的类型.然后,您可 ..
发布时间:2021-04-23 19:55:37 其他开发

是否可以同时使用C ++ 11 ABI和cxx11样式字符串以及旧式字符串?

我有一些代码是在未设置_GLIBCXX_CXX11_ABI的情况下使用GCC 5.3.1构建的.现在,假设我想在同一代码中同时使用旧样式和新样式的 std :: __ cxx11 :: string .那可能吗?如果可以,怎么办? 注意: 我确实没有这样做的充分理由.我确实有一个不太好的理由,但是请让它成为一个理论上的问题. 如果没有将C ++ 11字符串称为 std :: stri ..
发布时间:2021-04-20 18:41:46 C/C++开发

IllegalArgumentException:不支持的ABI:Android 5.0上的VMRuntime.getInstructionSet()中为null

在我们最近进行更新后,看到我们统一制作的游戏在Google Play控制台上崩溃,这种情况在Android 5.0上发生的机率超过了99%.我猜想这与WebView有关,并且看到了这篇相关文章: https://bugs.chromium.org/p/chromium/issues/detail?id = 559720 但是,这似乎与我们的情况不符,因为我们在最近的更新后才看到此崩溃,并且几乎所有 ..
发布时间:2021-04-06 18:35:19 移动开发

Android Studio:缺少工具条

使用终端命令 gradle clean assembleRelease : 构建我的android studio代码时,我不断收到此警告. 由于缺少ABI'ARMEABI'的删除工具而无法删除库'lib.so'.打包原样. 请帮助我解决此警告的方法. 注意:我知道这不会影响我的应用程序的行为,但是我的APK太大了,这肯定会帮助我减小APK的大小.所以我需要解决这个问题. 解决 ..
发布时间:2021-04-04 20:46:14 移动开发

STL容器和二进制接口兼容性

STL二进制接口 我很好奇,是否有人在跨多个C ++编译器和平台的STL对象的兼容接口层上工作. 目标是支持将STL类型作为第一类或固有数据类型. 通常通过模板施加一些固有的设计限制来防止这种情况吗?这似乎是使用STL进行二进制分发的主要限制. 理论-也许答案是务实的 Microsoft已将精力投入到.NET中,并不太在乎C ++ STL支持是否是“一流". 开 ..
发布时间:2020-11-29 23:25:48 C/C++开发

默认构造函数和析构函数是否是内联的?

我很好奇编译器生成的默认构造函数和析构函数是否是内联的,因为我可以用任何一种方式对其进行辩护.一方面,您希望默认构造函数/析构函数不内联,以便以后添加它们不会破坏ABI(因为仅当存在默认值时编译的目标文件才会内联生成的定义而不是您定义的内容).另一方面,对于C ++编译器来说,编译C语言的性能与使用C编译器编译时一样,不能为每个分配的结构添加构造函数/析构函数调用,而在C ++中,类之间的唯一功能 ..
发布时间:2020-11-28 02:04:18 C/C++开发

Google Play商店中不受支持的设备-Flutter

我已经将我的应用程序上传到了Google商店,但是我的一些朋友无法安装它,他们得到了“您的设备与此版本不兼容"的信息. 我已经检查了sdk,屏幕尺寸和权限要求,还使用了false所需的使用功能,但仍然有些设备无法安装它. 我在Play控制台的设备目录中发现的部分支持某些型号,受支持的设备包括: 阿比 arm64-v8a armeabi-v7a 阿米比 和仅不受支持的设备: arm ..
发布时间:2020-11-09 04:54:49 移动开发

在枚举中添加枚举符是否会破坏ABI?

特别是,我在库界面中获得了以下代码: typedef enum { state1, state2, state3, state4, state5, state_error = -1, }状态; 我严格禁止破坏ABI。但是,我想添加state6和state7。会破坏ABI吗? 我发现此处一些提示,但我有点怀疑是否是我的情况? 您可以... ..
发布时间:2020-10-30 03:24:19 C/C++开发