abi相关内容
我在使用终端命令gradle clean assembleRelease构建我的android studio代码时不断收到这个警告: 由于缺少 ABI 'ARMEABI' 的剥离工具,无法剥离库 'lib.so'.按原样打包. 请帮助我解决此警告. 注意:我知道这不会影响我的应用程序的行为,但是我的 APK 太大了,这肯定会帮助我减少 APK 的大小.所以我需要解决这个问题.
..
test.c(裸机) #include int add1(int a, int b){国际 c;c = a + b;返回 c;}int main(){整数 x, y, z;x = 3;y = 4;z = add1(x,y);printf("z = %d\n", z);} 我做 aarch64-none-elf-gcc test.c -specs=rdimon.specs 并得到 a.out.我
..
如何构建可在配备 Intel CPU 的设备上运行的应用程序?我的应用程序可以在采用 arm 技术的设备上运行,但是当我尝试在采用 Intel CPU 的设备上安装我的应用程序时,它会显示此消息: 设备不兼容 日志中的这条消息: 失败 [INSTALL_FAILED_CPU_ABI_INCOMPATIBLE] 这是我的项目 build.gradle 文件: 应用插件:'c
..
我了解到系统调用号是作为 ARM OABI(旧应用程序二进制接口)上的“svc(或 swi)"指令的直接操作数传递的.立即数操作数为“0x900000+(系统调用次数)" 例如,发出EXIT系统调用如下. svc #0x900001 @ sys_exit 我对 syscall() 函数的实现感到好奇,因为 sycall() 将系统调用号作为其参数.我猜 syscall() 的二进制代码不能轻易
..
基本上我想知道 ARMv7l 和 ARMv7hl 之间的区别? 我有一个带有 armv7l 的 arm 处理器,并且有很多用于 armv7hl 的 rpm. 我不知道我必须搜索什么才能获得相关信息. 这个“后缀"叫什么?还有其他类型吗?他们的做法有何不同? 解决方案 我认为它表示为 little-endian 和 hard-float ABI 编译的包视情况而定 - 即它
..
我在使用终端命令gradle clean assembleRelease构建我的android studio代码时不断收到这个警告: 由于缺少 ABI 'ARMEABI' 的剥离工具,无法剥离库 'lib.so'.按原样打包. 请帮助我解决此警告. 注意:我知道这不会影响我的应用程序的行为,但是我的 APK 太大了,这肯定会帮助我减少 APK 的大小.所以我需要解决这个问题.
..
我一直在阅读 Clang 源代码,并发现了一些关于 ARM C++ ABI 的有趣之处,我似乎无法理解其理由.来自 ARM ABI 文档: 此 ABI 要求 C1 和 C2 构造函数返回 this(而不是 void 函数),以便 C3 构造函数可以尾调用C1构造函数,C1构造函数可以尾调用C2. (对于非虚拟析构函数也类似) 我不确定这里的 C1、C2 和 C3 引用了什么...
..
有一个类似的帖子,涵盖了常规寄存器.NEON寄存器怎么样.据我所知,必须跨函数调用保留寄存器的上半部分或下半部分.我在任何地方都找不到该信息,有人可以澄清一下吗? 谢谢 来自 AAPCS,§5.1.1 核心寄存器: r0-r3 是参数和暂存寄存器;r0-r1 也是结果寄存器 r4-r8 是被调用者保存寄存器 r9 可能是一个被调用者保存寄存器(在 AAPCS 的某些变体上它是
..
我越看这个 PDF (应用程序二进制接口ARM 体系结构:基本标准)我越不明白它的含义.另外我想对 ARM 架构的过程调用标准 和 用于 ARM 架构的 ELF. 解决方案 ABI(Application Binary Interface)是一种标准,定义了低级概念之间的映射高级语言和特定硬件/操作系统平台的机器代码的能力.这包括以下内容: C/C++/Fortran/... 数据类
..
我是 Unity 的新手,我正在尝试将 Unity 游戏(它具有 ARcore)集成到本机 Android 应用程序中. 我可以在新的 HelloWorld 应用程序中启动 unity,但无法在我的真实应用程序(具有其他模块)中启动. 注意:当我从 Unity 项目构建一个 android 库时,我会包含 armeabi-v7a 和 x86 架构. java.lang.Unsatis
..
更新:尝试将“v7a"ABI 版本代码降低到前缀 4(低于 5,即“v8"),但没有任何运气 目前我的应用处于 Alpha 阶段.每个 APK 都是通过相同的 ABI 拆分和相同的版本乘法为每个 ABI(包括代码)生成的,“armeabi-v7a"和“arm64-v8a".尽管到目前为止我只上传了“v8a"APK.现在,当我尝试上传“v7a"时,我从 google play 控制台收到以下错
..
我是 Linux 系统编程的新手,在阅读时遇到了 API 和 ABILinux 系统编程. API 的定义: API 定义了接口,通过这些接口一个软件通信与另一个在源级别. ABI 的定义: 而 API 定义了一个源接口,ABI 定义了两个之间的低级二进制接口或多个软件在一个特定的架构.它定义了应用程序如何与本身,应用程序如何交互与内核,以及如何应用程序与库交互. 程
..
我目前正在通过反汇编 C 程序并试图理解它们的作用来练习汇编阅读. 我被一个小问题困住了:一个简单的 hello world 程序. #include #include int main() {printf("你好,世界!");返回(0);} 当我拆卸主体时: (gdb) 反汇编 main转储函数 main 的汇编代码:0x0000000000400526 :推送rbp0x00
..
据此:UNIX & 的调用约定是什么?Linux 系统调用 i386 和 x86-64,在 x64-amd System V ABI 中,参数在这些寄存器上依次传递:%rdi, %rsi, %rdx, %rcx, %r8 和 %r9,按这个顺序.第 7 个和更高的 arg 在堆栈上传递.所以问题是,被调用者如何知道剩余的(第 7 个及更多)参数有多少以及以何种顺序 pop ?被调用者是否从 arg
..
在 this 文档中.27 它说文本段开始于0x400000.为什么选择这个特定地址?有没有原因是什么?在 Linux 上的 GNU ld 中选择了相同的地址: $ ld -verbose |grep -i 文本段提供(__executable_start = SEGMENT_START(“文本段",0x400000));.= SEGMENT_START("文本段", 0x400000) + S
..
我试图弄清楚如果你从函数中按值返回一个结构体,而不是返回一个指向该结构体的指针,那么在 C++ 中实际发生了什么.如果一个函数只能返回一个可以放入寄存器的值,那么在按值发送结构时如何进行通信?(我在某处读到过.) 我尝试在 Godbolt 上测试它,看看它在做什么.但我不了解大会,所以这对我有点乐观. 在我看来,在没有太多汇编知识的情况下,该函数只是更改了调用该函数之前存在的一些内存?
..
我阅读了适用于 i386 和 AMD64 的 System V ABI.他们告诉参数必须四舍五入为字长的倍数.我不明白为什么. 这是情况.如果您将 4 个字符参数传递给 i386 架构上的函数,它将占用 16 个字节(每个字符参数为 4 个字节).像局部变量那样为所有 4 个参数分配 4 个字节不是更有效吗? 对齐不是答案.因为在这两种情况下,16 字节堆栈对齐都可能需要 4-12 字
..
从这个问题,通过 linux x86-64 函数调用保留了哪些寄存器,它说以下寄存器是跨函数调用保存: r12, r13, r14, r15, rbx, rsp, rbp 所以,我继续进行了以下测试: .globl _start_开始:移动 $5,%r12移动 $5,%r13移动 $5,%r14移动 $5,%r15调用 get_array_sizemov $60, %eax系统调用get_a
..
AMD 有一个 ABI 规范,描述了在 x86-64 上使用的调用约定.所有操作系统都遵循它,除了具有自己的 x86-64 调用约定的 Windows.为什么? 有谁知道造成这种差异的技术、历史或政治原因,还是纯粹是 NIH 综合症的问题? 我知道不同的操作系统可能对更高级别的东西有不同的需求,但这并不能解释为什么例如 Windows 上的寄存器参数传递顺序是 rcx - rdx -
..
在尝试优化 x86_64 上的返回值时,我注意到了一件奇怪的事情.即,给定代码: #include #include #include 使用命名空间标准;constexpr uint64_t a = 1u;constexpr uint64_t b = 2u;对f() { 返回 {a, b};}元组g() { 返回元组{a, b};} 锵3.8输出 f 的
..