首页 > 编程知识 正文

android可执行文件无权限,安卓的可执行文件

时间:2023-05-06 10:00:39 阅读:255668 作者:1282

1.Android 程序的生成步骤  aapt 打包资源文件, 生成R.java, resources.arsc处理aidl文件, 生成相应接口文件javac编译工程文件, 生成class文件NDK编译C/C++文件dx转换所有class文件生成classes.dex (压缩常量池等工作)apkbuilder打包生成apkjarsigner或signapk给apk签名zipalign apk2.Android 程序的安装流程 

四种安装方式:

1.系统应用安装――开机时完成,没有安装界面

2.网络下载应用安装――通过market应用完成,没有安装界面

3.ADB工具安装――没有安装界面

4.第三方应用安装――通过SD卡里的APK文件安装,有安装界面,由packageinstaller.apk应用处理安装及卸载过程的界面。

 

应用安装的流程及路径 
应用安装涉及到如下几个目录:        

system/app ------------系统自带的应用程序,获得adb root权限才能删除

data/app  ---------------用户程序安装的目录。安装时把 apk文件复制到此目录
data/data ---------------存放应用程序的数据
data/dalvik-cache-----将apk中的dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一)

3.dex文件格式

dex 文件中的数据结构

类型描述u1等同于uint8_t, 表示1字节的无符号数u2等同于uint16_t, 表示2字节的无符号数u4等同于uint32_t, 表示4字节的无符号数u8等同于uint64_t, 表示8字节的无符号数sleb128有符号LEB128, 可变长1~5字节uleb128无符号LEB128, 可变长1~5字节uleb128p1无符号LEB128值加1, 可变长1~5字节

每个LEB128由1~5个字节组成, 所有字节组合在一起表示一个32位数据, 每个字节只有7位有效位, 如果第一个字节的最高位是1, 表示LEB128需要使用到第二个字节, 以此类推, 最多能用5个字节.

dex 的文件结构  dex_header dex文件头, 指定dex的属性, 及其他部分在dex中的物理偏移string_idstype_idsproto_idsfield_idsmethod_idsclass_defdatalink_data 目前为空 
struct DexFile { 
DexHeader Header, 
DexStringId StringIds[stringIdsSize], 
DexTypeId TypeIds[typeIdsSize], 
DexProtoId ProtoIds[protoIdsSize], 
DexFieldId FieldIds[fieldIdsSize], 
DexMethodId MethodIds[methodIdsSize], 
DexClassDef ClassDefs[classDefsSize], 
DexData Data[], 
DexLink LinkData 
};

Dex文件结构分析

DexHeader

类型字段名描述u1magic[8]dex版本标识u4checksumadler32检验u1signature[kSHA1DigestLen]SHA-1哈希值, kSHA1DigestLen为20, 见dalvik/libdex/DexFile.h.u4headerSizeDexHeader结构大小u4endianTag字节序标记u4linkSize链接段大小u4linkOff链接段偏移u4mapOffDexMapList的文件偏移u4stringIdsSizeDexStringId的个数u4stringIdsOffDexStringId的文件偏移u4typeIdsSizeDexTypeId的个数u4typeIdsOffDexTypeId的文件偏移u4protoIdsSizeDexProtoId的个数u4protoIdsOffDexProtoId的文件偏移u4fieldIdsSizeDexFieldId的个数u4fieldIdsOffDexFieldId的文件偏移u4methodIdsSizeDexMethodId的个数u4methodIdsOffDexMethodId的文件偏移u4classDefsSizeDexClassDef的个数u4classDefsOffDexClassDef的文件偏移u4dataSize数据段的大小u4dataOff数据段的文件偏移

DexMapList

类型字段描述u4sizeDexMapItem的个数DexMapItemlistDexMapItem结构

DexMapItem

类型字段描述u2typekDexType开头的类型u2unused未使用, 用于字节对齐u4size指定类型的个数u4offset指定类型数据的文件偏移

DexStringId

类型字段描述u4stringDataOff字符串的数据偏移

MUTF-8编码

DexTypeId

类型字段描述u4descriptorIdx指向DexStringId列表的索引

DexProtoId

类型字段描述u4shortyIdx指向DexStringId列表的索引u4returnTypeIdx指向DexTypeId列表的索引u4parametersOff指向DexTypeList的偏移

它表示一个方法声明, shortyIdx为方法声明字符串, returnTypeIdx为方法返回类型字符串, parametersOff指向DexTypeList结构体, 存放了方法的参数列表.

DexTypeList

类型字段描述u4sizeDexTypeItem的个数DexTypeItemlistDexTypeItem结构

DexTypeItem

类型字段描述u2typeIdx指向DexTypeId列表的索引

DexFieldId

类型字段描述u2classIdx类的类型, 指向DexTypeId列表的索引u2typeIdx字段类型, 指向DexTypeId列表的索引u4nameIdx字段名, 指向DexStringId列表的索引

DexMethodId

类型字段描述u2classIdx类的类型, 指向DexTypeId列表的索引u2protoIdx声明类型, 指向DexProtoId列表的索引u4nameIdx方法名, 指向DexStringId列表的索引

DexClassDef

类型字段描述u4classIdx类的类型, 指向DexTypeId列表的索引u4accessFlags访问标志u4superclassIdx父类类型, 指向DexTypeId列表的索引u4interfacesOff接口, 指向DexTypeList的偏移u4sourceFileIdx源文件名, 指向DexStringId列表的索引u4annotationsOff注解, 指向DexAnnotataionDirectoryItem结构u4classDataOff指向DexClassData结构的偏移u4staticValuesOff指向DexEncodedArray结构的偏移

DexClassData

类型字段描述DexClassDataHeaderheader指定字段与方法的个数DexFieldstaticFields静态字段, DexField结构DexMethoddirectMethods直接方法, DexMethod结构DexMethodvirtualMethods虚方法, DexMethod结构

DexClassDataHeader

类型字段描述u4staticFieldsSize静态字段个数u4instanceFieldsSize实例字段个数u4staticMethodsSize直接方法个数u4virtualMethodsSize虚方法个数

DexField

类型字段描述u4fieldIdx指向DexFieldId的索引u4accessFlags访问标志

DexMethod

类型字段描述u4methodIdx指向DexMethodId的索引u4accessFlags访问标志u4codeOff指向DexCode结构的偏移

DexCode

类型

字段

描述  u2registersSize使用的寄存器个数  u2insSize参数个数  u2outsSize调用其他方法时, 使用的寄存器个数  u2triesSizetry/catch个数  u4debugInfoOff指向调试信息的偏移  u4insnsSize[1]指令集  2字节空间用于结构对齐    try_item[triesSize]DexTry结构   try/catch中handler的个数    catch_handler_item[handlersSize]DexCatchHandler结构

 

参加

4.odex文件格式 odex文件的生成略odex文件的整体结构略odex文件结构分析略5.dexopt的工作过程略 6.破解dex文件

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。