Shell接收到命令,启动一个程序,此时shell首先会fork一个新的进程
新fork的进程,通过execve系统调用,陷入到内核中,内核检查和加载需要执行的二进制映像文件,检验其合法性及权限。通常用户态进程要启动一个新的程序(如shell),fork后,execve要紧跟着执行,这样会有更好的效率(由于使用COW技术,这样可以避免页表复制,而execve后,之前进程中的所有内容都是无用的,若execve紧跟fork后,可以避免COW引起的拷贝)
通常二进制文件都会要依赖一些系统动态库,此时kernel会启动加载器/system/bin/linker,执行linker的__linker_init()
Linker的linker_init(),会分析二进制的elf文件,加载依赖的动态库文件,然后转入二进制映像的入口函数__start中执行
__start会调用C库的初始化函数__libc_init()
__libc_init()会调用映像的main函数,这个main函数也就是用户app的入口函数
main() 函数执行完毕后,通过exit()退出进程执行
方法一:使用aapt//aapt是sdk自带的一个工具,在sdk\builds-tools\目录下1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt dump badging E:\apk\es3.apk2.运行后的结果中以下两行分别是应用包名package和入口activity名称package: name=’com.estrongs.android.pop’launchable-activity: name=’com.estrongs.android.pop.view.FileExplorerActivity’注:在android sdk目录搜索可以找到aapt.exe,如果没有可以下载apktool。 方法二:查看AndroidManifest.xml1.使用apktool反编译app:apktool.bat d es3.apk E:\apk\es2.打开AndroidManifest.xmlmanifest节点的package属性值是应用的包名:<manifest package=”com.estrongs.android.pop”>查找android.intent.action.MAIN和android.intent.category.LAUNCHER对应的activity,该activity对应的android:name属性既是入口activity名称,如下:<activity android:theme=”@*androidtyle/Theme.NoTitleBar” android:label=”@string/app_name” android:name=”com.estrongs.android.pop.view.FileExplorerActivity”><intent-filter><action android:name=”android.intent.action.MAIN” /><category android:name=”android.intent.category.LAUNCHER” /></intent-filter></activity>android.intent.action.MAIN决定应用程序最先启动的Activityandroid.intent.category.LAUNCHER决定应用程序是否显示在程序列表里升级失败导致无法正常开机,建议强刷手机来解决。
电脑下载安装flashtool软件,并安装对应手机型号的手机驱动;
电脑下载适配手机型号的官方rom包,并将其放置在flashtool的安装源文件夹里的firmwares文件夹里;
打开flashtool软件,点击左上角的闪电图标,再选择强刷模式;
选择刚刚下载完的手机官方rom包,点击刷入;
手机连接电脑,flashtool检测到手机,并自动开始系统刷机;
等待刷机读条进行,完成后会d出拔出手机并启动手机的通知,拔出手机后,首次重启时间比较长,耐心等待至正常进入开机界面即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)