abi

storage register for scanf call in gas

倖福魔咒の 提交于 2020-06-17 15:47:06
问题 I am trying to understand scanf function a have 3 question regarding it. this is c file: #include <stdio.h> #include <stdlib.h> int main(){ int x; printf("Enter X:\n"); scanf("%i",&x); printf("You entered %d...\n",x); return 0; } and here is gas: .text .section .rodata .LC0: .string "Enter X:" .LC1: .string "%i" .LC2: .string "You entered %d...\n" .text .globl main .type main, @function main: pushq %rbp # movq %rsp, %rbp #, subq $16, %rsp #, # a.c:5: printf("Enter X:\n"); leaq .LC0(%rip),

Why does not XORing %eax causes segfault? [duplicate]

别等时光非礼了梦想. 提交于 2020-06-17 13:21:25
问题 This question already has answers here : Segmentation fault on printf - NASM 64bit Linux (1 answer) Calling printf in x86_64 using GNU assembler (2 answers) main and stack alignment (1 answer) Why does System V / AMD64 ABI mandate a 16 byte stack alignment? (1 answer) Closed 12 days ago . .text having this: str: .string "string" .globl main main: xor %eax, %eax #is commented causes segfault leaq str(%rip), %rdi call printf xorq %rdi, %rdi call exit Does printf uses %rax ? or is the segfault

What you should know about .so files

与世无争的帅哥 提交于 2020-04-08 02:10:41
In its early days, the Android OS was pretty much supporting only one CPU architecture: ARMv5. Do you know how many it does support now? … 7! Seven distinct CPU-architectures are currently supported by the Android OS: ARMv5 , ARMv7 (since 2010), x86 (2011), MIPS (2012), ARMv8 , MIPS64 and x86_64 (2014). Each of them is associated with a respective ABI. An Application Binary Interface is the definition of how binaries (esp. .so files ) should be made in order to work on the platform, from the instruction set used and memory alignment, to the system libraries that are available. On Android there

android studio NDK配置

喜你入骨 提交于 2020-04-01 13:07:29
向您的项目添加 C 和 C++ 代码 本文内容 下载 NDK 和构建工具 创建支持 C/C++ 的新项目 构建和运行示例应用 向现有项目添加 C/C++ 代码 创建新的原生源文件 创建 CMake 构建脚本 将 Gradle 关联到您的原生库 搭配使用 Android Studio 2.2 或更高版本 与 Android Plugin for Gradle 版本 2.2.0 或更高版本 时,您可以将 C 和 C++ 代码编译到 Gradle 与 APK 一起打包的原生库中,将这类代码添加到您的应用中。您的 Java 代码随后可以通过 Java 原生接口 (JNI) 调用您的原生库中的函数。如果您想要详细了解如何使用 JNI 框架,请阅读 Android 的 JNI 提示 。 Android Studio 用于构建原生库的默认工具是 CMake。由于很多现有项目都使用构建工具包编译其原生代码,Android Studio 还支持 ndk-build 。如果您想要将现有的 ndk-build 库导入到您的 Android Studio 项目中,请参阅介绍如何配置 Gradle 以 关联到您的原生库 的部分。不过,如果您在创建新的原生库,则应使用 CMake。 本页面介绍的信息可以帮助您使用所需构建工具设置 Android Studio、创建或配置项目以支持 Android 上的原生代码

No CPU/ABI system image available for this target

喜你入骨 提交于 2020-03-06 10:32:48
在创建AVD设备的时候无法正常创建虚拟设备,CPU选项不能选择。 下面报错: No CPU/ABI system image available for this target 是因为SDK里面缺少了system-images文件,可以在安卓官网下载 https://www.androiddevtools.cn/#tsq=adt&tsp=1 下载对应的版本   这是在创建模拟器时需要的system image,也就是在创建模拟器时 CPU/ABI 项需要选择的,下载并解压后,将解压出的整个文件夹复制或者移动到 your sdk 路径/system-images 文件夹下即可, 如果没有 system-images 目录就先创建此文件夹,然后打开SDK Manager,打开 Tools(工具) 菜单选择 Options(选项) 菜单项打开Android SDK Manager Setting对话框,点击 Clear Cache(清除缓存) 按钮,然后重启Eclipse(或Android Studio)和SDK Manager。 搞定! 来源: https://www.cnblogs.com/ma1998/p/12425079.html

solidity学习过程 --- abi编码

拥有回忆 提交于 2020-03-05 21:44:59
abi编码函数 什么是abi 应用程序二进制接口,以太坊的调用合约时的接口说明 ABI是两个程序模块之间的接口,主要是用于将数据编码或解码为源代码所表示的代码。 以太坊中主要用于solidity合约的函数调用,以及反向编码读取数据的中的方法 solidityABI编码函数 abi.encode(…) returns (bytes):计算参数的 ABI 编码。 abi.encodePacked(…) returns (bytes):计算参数的紧密打包编码 abi. encodeWithSelector(bytes4 selector, …) returns (bytes): 计算函数选择器和参数的 ABI 编码 abi.encodeWithSignature(string signature, …) returns (bytes): 等价于* abi.encodeWithSelector(bytes4(keccak256(signature), …) solidityABI编码函数 实现细节 函数选择器, 官方文档 定义如下: 一个函数调用数据的前 4 字节,指定了要调用的函数。这就是某个函数签名的 Keccak(SHA-3)哈希的前 4 字节(高位在左的大端序)(译注:这里的“高位在左的大端序“,指最高位字节存储在最低位地址上的一种串行化编码方式,即高位字节在左)。

Purpose of rdi register for no argument function

别来无恙 提交于 2020-03-04 05:03:40
问题 Consider this simple function: struct Foo { int a; int b; int c; int d; int e; int f; }; Foo foo() { Foo f; f.a = 1; f.b = 2; f.c = 3; f.d = 4; f.e = 5; f.f = 6; return f; } It generates the following assembly: 0000000000400500 <foo()>: 400500: 48 ba 01 00 00 00 02 movabs rdx,0x200000001 400507: 00 00 00 40050a: 48 b9 03 00 00 00 04 movabs rcx,0x400000003 400511: 00 00 00 400514: 48 be 05 00 00 00 06 movabs rsi,0x600000005 40051b: 00 00 00 40051e: 48 89 17 mov QWORD PTR [rdi],rdx 400521: 48

NDK SO 库开发与使用中的 ABI 构架选择

喜欢而已 提交于 2020-02-28 00:34:08
Bugtags V1.2.7 引入了 NDK SO 库,在集成的时候,遇到不同的 SO 库打包到 APK 时,安装在某些机器上,出现 java.lang.UnsatisfiedLinkError 加载失败。 为此,深究了一下原理,和给出了解决方案。 原理 Android 系统本质是一个经过改造的 Linux 系统。最早,Android 系统只支持 ARMv5 的 CPU 构架,随着 Android 系统的发展,又加入了 ARMv7 (2010), x86 (2011), MIPS (2012), ARMv8, MIPS64 和 x86_64 (2014)。 每一种 CPU 构架,都定义了一种 ABI(Application Binary Interface),ABI 决定了二进制文件如何与系统进行交互。 一般情况下,你不需要关注这些。当你的 APP 中用到了些包含 SO 库第三方库,或者自己使用 NDK 来实现了某些功能,你就需要认真阅读接下来的教程。 NDK SO 支持不同的 CPU 构架 在使用 NDK 开发包含 c/c++ 代码的 SO 库的时候,你可以选择输出支持如下 ABI CPU 构架: armeabi armeabi­v7a arm64­v8a x86 x86_64 mips mips64 Bugtags 的 NDK 库支持如上所有的 CPU 构架: