精华内容
下载资源
问答
  • 您的二进制文件显然取决于动态链接不可见的某些共享库(.so).您可以使用工具链中的readelf来获得如下内容:tom@pc:~/workspace/test/arm-v7a_android9/release$~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/...

    您的二进制文件显然取决于动态链接不可见的某些共享库(.so).您可以使用工具链中的readelf来获得如下内容:

    tom@pc:~/workspace/test/arm-v7a_android9/release$~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/bin/arm-linux-androideabi-readelf -d test

    Dynamic section at offset 0x445a14 contains 27 entries:

    Tag Type Name/Value

    0x00000003 (PLTGOT) 0x44fc50

    0x00000002 (PLTRELSZ) 1864 (bytes)

    0x00000017 (JMPREL) 0x74d24

    0x00000014 (PLTREL) REL

    0x00000011 (REL) 0x74cd4

    0x00000012 (RELSZ) 80 (bytes)

    0x00000013 (RELENT) 8 (bytes)

    0x00000015 (DEBUG) 0x0

    0x00000006 (SYMTAB) 0x8148

    0x0000000b (SYMENT) 16 (bytes)

    0x00000005 (STRTAB) 0x26718

    0x0000000a (STRSZ) 273460 (bytes)

    0x00000004 (HASH) 0x6934c

    0x00000001 (NEEDED) Shared library: [liblog.so]

    0x00000001 (NEEDED) Shared library: [libm.so]

    0x00000001 (NEEDED) Shared library: [libc.so]

    0x00000001 (NEEDED) Shared library: [libdl.so]

    0x0000001a (FINI_ARRAY) 0x447cb8

    0x0000001c (FINI_ARRAYSZ) 12 (bytes)

    0x00000019 (INIT_ARRAY) 0x447cc4

    0x0000001b (INIT_ARRAYSZ) 324 (bytes)

    0x00000020 (PREINIT_ARRAY) 0x447e08

    0x00000021 (PREINIT_ARRAYSZ) 0x8

    0x0000001e (FLAGS) BIND_NOW

    0x6ffffffb (FLAGS_1) Flags: NOW

    0x00000000 (NULL) 0x0

    检查所有类型(NEEDED)的库是否在您的Android设备上并且对于您的二进制文件是可见的(您应该使用export LD_LIBRARY_PATH =< path> [:< another_path> [..]]使.so可用于动态链接用你的二进制文件).

    如果问题仍未解决,您的应用程序将链接到某个系统库的不同版本 – 尝试使用较旧的工具链.

    展开全文
  • Android 使用NDK编译二进制文件运行本文介绍如何编译可以在Android平台上运行的二进制可执行文件。首先我们,知道,Android是基于Linux的,而在Linux上,可以执行二进制文件,那么如何在Android上执行二进制文件呢...

    Android 使用NDK编译二进制文件并运行

    本文介绍如何编译可以在Android平台上运行的二进制可执行文件。

    首先我们,知道,Android是基于Linux的,而在Linux上,可以执行二进制文件,那么如何在Android上执行二进制文件呢?

    使用NDK编译

    如果你已经下载了NDK,并且将其添加进环境变量,可以这样编译二进制文件。

    首先新建一个HelloWorld文件夹,在其内部建立一个子文件夹jni,

    jni包含3个文件夹,hello.c,Android.mk,Application.mk

    1. hello.c 代码如下

    #include

    int main(void){

    printf("Hello World!

    ");

    return 0;

    }

    代码很简单,就是输出一句话

    Android.mk文件

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := hello

    LOCAL_SRC_FILES := hello.c

    include $(BUILD_EXECUTABLE)

    好,我们来解释一下这几行代码:

    LOCAL_PATH := $(call my-dir)

    一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数my-dir, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

    include $( CLEAR_VARS)

    CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等…),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

    LOCAL_MODULE := hello

    LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。

    LOCAL_SRC_FILES := hell.c

    LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好

    include $(BUILD_EXECUTABLE)

    BUILD_EXECUTABLE是编译系统提供的变量,告诉编译器编译成二进制文件。

    Application.mk文件

    APP_ABI := all

    该指令的意思是,对所有的硬件结构(arm,x86等),都编译一个可执行文件。

    然后我们在cmd,切换到HelloWorld目录下,执行ndk-build编译,

    我们发现编译成功后,Hello World目录下多了一个libs目录,这个就是我们可执行二进制文件的目录啦,我们打开,发现里面有很多子目录,

    这是因为,我们在Application.mk文件中,指定所有的架构都要编译,我们根据自己手机的架构(我的是armv7架构),将其目录下的hello文件,通过adb push命令复制到手机上,

    adb push hello /data/local/tmp

    注意,Android的有些目录是无法执行二进制文件的,所以一般放在/data/local/tmp目录中。

    Android手机上执行二进制文件

    上一步,我们已经把二进制文件hello复制到手机上,我们来测试,其是否能在手机上运行。

    通过adb shell进入手机shell模式,

    然后切换到/data/local/tmp目录,

    执行ls命令,查看是否存在hello文件,若不存在,请确保上述步骤正确。

    若存在,我们执行该文件

    然而,却提示我们无法执行,怎么回事?

    别急,我们用ls -l hello命令来查看hello的详细信息,

    我们发现hello是没有可执行权限的(关于权限不懂,请自行百度Linux权限),我们通过chmod命令来修改其权限,chmod 751 hello,然后执行

    我们发现,执行成功了!

    ————————————————

    转载 https://blog.csdn.net/u014088294/article/details/49924967

    展开全文
  • Android 使用NDK编译二进制文件运行本文介绍如何编译可以在Android平台上运行的二进制可执行文件。首先我们,知道,Android是基于Linux的,而在Linux上,可以执行二进制文件,那么如何在Android上执行二进制文件呢...

    Android 使用NDK编译二进制文件并运行

    本文介绍如何编译可以在Android平台上运行的二进制可执行文件。

    首先我们,知道,Android是基于Linux的,而在Linux上,可以执行二进制文件,那么如何在Android上执行二进制文件呢?

    使用NDK编译

    如果你已经下载了NDK,并且将其添加进环境变量,可以这样编译二进制文件。

    首先新建一个HelloWorld文件夹,在其内部建立一个子文件夹jni,

    jni包含3个文件夹,hello.c,Android.mk,Application.mk

    1. hello.c 代码如下

    #include

    int main(void){

    printf("Hello World!

    ");

    return 0;

    }

    代码很简单,就是输出一句话

    Android.mk文件

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE := hello

    LOCAL_SRC_FILES := hello.c

    include $(BUILD_EXECUTABLE)

    好,我们来解释一下这几行代码:

    LOCAL_PATH := $(call my-dir)

    一个Android.mk file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个例子中,宏函数my-dir, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

    include $( CLEAR_VARS)

    CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等…),除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

    LOCAL_MODULE := hello

    LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。

    LOCAL_SRC_FILES := hell.c

    LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好

    include $(BUILD_EXECUTABLE)

    BUILD_EXECUTABLE是编译系统提供的变量,告诉编译器编译成二进制文件。

    Application.mk文件

    APP_ABI := all

    该指令的意思是,对所有的硬件结构(arm,x86等),都编译一个可执行文件。

    然后我们在cmd,切换到HelloWorld目录下,执行ndk-build编译,

    我们发现编译成功后,Hello World目录下多了一个libs目录,这个就是我们可执行二进制文件的目录啦,我们打开,发现里面有很多子目录,

    这是因为,我们在Application.mk文件中,指定所有的架构都要编译,我们根据自己手机的架构(我的是armv7架构),将其目录下的hello文件,通过adb push命令复制到手机上,

    adb push hello /data/local/tmp

    注意,Android的有些目录是无法执行二进制文件的,所以一般放在/data/local/tmp目录中。

    Android手机上执行二进制文件

    上一步,我们已经把二进制文件hello复制到手机上,我们来测试,其是否能在手机上运行。

    通过adb shell进入手机shell模式,

    然后切换到/data/local/tmp目录,

    执行ls命令,查看是否存在hello文件,若不存在,请确保上述步骤正确。

    若存在,我们执行该文件

    然而,却提示我们无法执行,怎么回事?

    别急,我们用ls -l hello命令来查看hello的详细信息,

    我们发现hello是没有可执行权限的(关于权限不懂,请自行百度Linux权限),我们通过chmod命令来修改其权限,chmod 751 hello,然后执行

    我们发现,执行成功了!

    ————————————————

    转载 https://blog.csdn.net/u014088294/article/details/49924967

    展开全文
  • 在Linux中直接运行Windows二进制程序发布时间:2007-03-14 00:17:34来源:红联作者:Availslinux虽然大多数linux爱好者都不怎么使用Windows,但是不少人还是习惯了某些Windows下的软件,而不愿意从开源仓库中寻找替代品...
  • Linux下查看二进制文件命令

    千次阅读 2021-05-09 03:13:34
    一、在Linux下查看二进制文件的软件:xxdhexdump二、编辑:1、biew2、hexedit3、vimVim 来编辑二进制文件。Vim 本非为此而设计的,因而有若干局限。但你能读取一个文件,改动一个字符,然后把它存盘。结果是你的文件...
  • 我们都知道Android中所有应用程序都运行在Android的Dalvik虚拟机上,一般程序不直接与操作系统打交道,即便调用底层的方法也通过JNI技术,1.安装下载编译器和链接器软件.Sourcery G++ Lite Edition for ARM.arm-none...
  • 背景众所周知,go语言可打包成目标平台二进制文件是其一大优势,如此go项目在服务器不需要配置go环境和依赖就可跑起来。操作需求:打包部署到centos7笔者打包环境:mac os方法:进入main.go所在目录,输入如下命令,...
  • pycharm + python3 + win71pip install pyinstall (官网)2 准备 .py 文件3 具体例子from PyQt5.QtWidgets import QApplication, QDialog, QRadioButton, QVBoxLayout, QGroupBox, QHBoxLayout, QLabelimport sysfrom...
  • unity只能打包x86cpu架构的linux,树莓派是arm架构,无法运行可以装安卓系统,或者使用其他模拟程序,但是性能很低,放弃吧,可以换安卓的开发板
  • 二进制文件的读写

    2021-06-06 16:32:47
    C++可以读写文本类型的文件,同理也可以读写二进制类型的文件,虽然存储的内容可能无法直接通过双击打开...//二进制文件的读写 class Person { public: char m_Name[50];//姓名 int m_Age; //年龄 }; 注: 类型请勿使用
  • 二进制文件是二进制格式的计算机可读代码文件,它们直接用位控制CPU和处理器。 为了方便起见,库是可由各种程序使用的函数-例如,当您需要PHP Javascript中的模块时。 这种理解正确吗?如果是这样,为什么我们仍将库...
  • 一.下载wxWidgets .解压wxWidgets 三.使用wxWidgets 四.编译运行hello world例程
  • Windows平台打包到Linux执行不一样,需要输入如下命令 set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 ...打包完成后,将二进制文件放到服务器系统,赋可执行权限: chmod 773 main 直接运行即可: ./main
  • Linux中的二进制可执行文件和脚本可执行文件及Shebang 二进制可执行文件 我们知道,一个C程序经过预处理、编译、汇编、链接...我们编译得到 hello 文件,并用file命令可以查看到生成的二进制可执行文件的信息: gcc he
  • 在有些场景中,我们需要发送一个二进制文件进行请求,比如发送一张图片进行检测,在Postman中可以直接模拟请求,那么在Java中,如何实现呢,话不多说,直接上代码:public static String checkModelStatus(String ...
  • GDB不仅可以用来调试程序,还可以直接修改被调试程序的二进制文件。这种方式相比于改源码重新编译、gdb attach有什么优势呢?考虑以下企业生产环境中的几个调试场景: 需要修改的二进制文件是其他领域的,你没有...
  • Linux查找二进制文件(Linux Find Binary File)我试图在Linux系统中使用类似下面的方法找到二进制文件:if [ -f `which $1` ] thenecho "File Found"elseecho "File not Found"fi虽然代码工作正常,但问题是“哪个”...
  • Radare2 是一个为二进制分析定制的开源工具。有大量(非原生的)Linux工具可用于二进制分析,为什么要选择 Radare2 呢? 为什么我需要另一个工具? 如果现有的 Linux 原生工具也能做类似的事情,你自然会问为...
  • Class文件二进制分析

    2021-03-14 20:53:27
    [ 当你在unix下拿到一个二进制文件但不知道它是什么的时候,可以通过以下方法得到一此提示 1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以:本篇博文描述的是对一个很简单的java文件的对应的...
  • 原标题:如何在Windows和Linux上搜索可利用的二进制文件或exe文件 GtfoGtfo这款工具采用Python3开发,在Gtfo的帮助下,广大研究人员可以直接在命令行终端窗口中搜索GTFOBins和LOLBAS代码文件。该工具的主要功能就是...
  • Qt二进制文件操作(读和写)详解

    千次阅读 2020-12-29 09:28:06
    除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。 每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。 例如地球物理中常用的 SEG-Y ...
  • 日志分类 (1)二进制日志:以二进制文件的形式记录了数据库中的操作,但是不记录查询语句 (2)错误日志:记录Mysql服务器的启动、关... 文章 sktj 2018-05-21 737浏览量 《MySQL技术内幕:InnoDB存储引擎第2版》——3.7...
  • nginx 二进制可执行文件 Nginx 可执行文件说明: # cd /usr/local/nginx/sbin/ => 进入到Nginx的sbin目录下 #l ./nginx => 启动Nginx #l ./nginx -s stop => 强制关闭Nginx,不管Nginx当前是否在...
  • 运行一段Java源码,必须先将源码转换为class文件,class文件就是编译器编译之后供虚拟机解释执行的二进制字节码文件可以通过IDE工具或者命令行去将源码编译成class文件。这里我们使用命令行去操作,运行下面命令...
  • 解读字节码文件二进制类格式实际上是由 JVM 规范定义的。通常这些类表示是由编译器从 Java 语言源代码生成的,而且它们通常存储在扩展名为 .class 的文件中。但是,这些特性都无关紧要。就 JVM 而言,重要的部分不是...
  • 我们知道文件本身就是一份二进制数据,不同类型的文件只是编码形式不同,对应的解读形式不同,无论txt文件、jpg文件亦或是mp4文件,本质上都是0和1组成的。而在C++中我们可以通过字节流来读写文件,也就是说我们可以...
  • 二进制文件:没有统一的编码,而是直接由0和1组成,如.png文件或.avi文件 注意:无论什么类型的文件都可以二进制的方式打开。 eg: fo=open("a","w") fo.write("我爱祖国") fo.close() #以文本形式打开 f1=open("a
  • “ Karta”是IDA的python插件,其功能是在已经编译过的二进制文件中搜索是否使用了开源的代码。该插件是为了匹配大体积二进制文件中的开放源代码库的开源代码(通常是查找固件)。对于每天处理固件的人来说,反复的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 452,869
精华内容 181,147
关键字:

二进制文件可以直接运行吗