androidandroid 查看进程内存存怎么看

Android 为什么用久了内存占用越来越多?即使关闭了进程
例如开机的时候还有300mb 内存,随着使用内存越来越少直到最后基本上只剩下50mb.这个时候系统开始杀进程了。奇怪的是,就算手动把所有进程杀死(在设置里面的应用程序管理里已经几乎看不到进程和服务了,缓存的也几乎没有了)内存也无法恢复到最初了。所以这些内存都被什么吃掉了?内存泄漏杀掉了process 也应该能恢复吧?
按投票排序
Android的内存管理机制就是尽可能放满用于缓存,加快速度。没必要纠结于剩余内存,别把用Windows的习惯带进Android。
楼上的大哥,你确定你用过android?android的内存管理是很有问题的,绝没有宣传的那么好,总之就是不断的占用资源就算把进程杀了占用的资源也是无法释放的,最后只能是重启,然后不停的重复这个过程.所谓的缓存加速启动,其实导致了后来程序资源不足而闪退,卡顿.那谷歌为什么不完善呢,个人觉得为了方便各种应用自行启动加载广告吧.木有办法,要么不用,要么认命忍受
已有帐号?
无法登录?
社交帐号登录二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
参数含义:
PID:progress
identification,应用程序ID
S: 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
#THR:程序当前所用的线程数
VSS:Virtual Set Size虚拟耗用内存(包含共享库占用的内存)
RSS: Resident Set Size实际使用物理内存(包含共享库占用的内存)
PCY:不知道什么意思,期待解答
UID:User Identification,用户身份ID
Name:应用程序名称
查看内存消耗
2.输入dumpsys meminfo
(PID或者是包名),出现如下图;
参数含义:
dalvik:dalvik使用的内存
native:native堆上的内存,指C\C++堆的内存(android
3.0以后bitmap就是放在这儿)
other:除了dalvik和native的内存,包含C\C++非堆内存······
Pss:该内存指将共享内存按比例分配到使用了共享内存的进程
allocated:已使用的内存
free:空闲的内存
private dirty:非共享,又不能被换页出去的内存(比如linux系统中为了提高分配内存速度而缓冲的小对象,即使你的进程已经退出,该内存也不会被释放)
share dirty:共享,但有不能被换页出去的内存
1.通过DDMS,选择想要查看的程序进程,点击
2.在heap界面中查看内存消耗情况&&
3.想要进一步分析,需要借助于MAT 插件;
4.选中程序进程点击dump HPROF
file图标,弹出如下图,一般选择第一个就可以了;
5.出现如下图,点击leak
suspect,mat会列出占内存最大的的几个对象;
阅读(8098)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'查看android程序的CPU和内存消耗情况',
blogAbstract:'\n\n查看CPU&消耗\n\n1.进入',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}一、利用Android API函数查看1.1 ActivityManager查看可用内存。ActivityManager.MemoryInfo outInfo = new ActivityManager.MemoryInfo();&am.getMemoryInfo(outInfo);&outInfo.availMem即为可用空闲内存。1.2、android.os.Debug查询PSS,VSS,USS等单个进程使用内存信息MemoryInfo[] memoryInfoArray = am.getProcessMemoryInfo(pids);&MemoryInfo pidMemoryInfo=memoryInfoArray[0];pidMemoryInfo.getTotalPrivateDirty();getTotalPrivateDirty()Return total private dirty memory usage in kB. USSgetTotalPss()Return total PSS memory usage in kB.&PSSgetTotalSharedDirty()Return total shared dirty memory usage in kB. RSS二、直接对Android文件进行解析查询/proc/cpuinfo系统CPU的类型等多种信息。/proc/meminfo 系统内存使用信息如/proc/meminfoMemTotal:
kBMemFree:
kBBuffers: 3656 kBCached: 1195708 kB我们查看机器内存时,会发现MemFree的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。所以 空闲内存=free+buffers+cached=total-used通过读取文件/proc/meminfo的信息获取Memory的总量。ActivityManager. getMemoryInfo(ActivityManager.MemoryInfo)获取当前的可用Memory量。&三、通过Android系统提供的Runtime类,执行adb 命令(top,procrank,ps...等命令)查询通过对执行结果的标准控制台输出进行解析。这样大大的扩展了Android查询功能.例如:final Process m_process = Runtime.getRuntime().exec(&/system/bin/top -n 1&);final StringBuilder sbread = new StringBuilder();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(m_process.getInputStream()), 8192);# procrankRuntime.getRuntime().exec(&/system/xbin/procrank&);内存耗用:VSS/RSS/PSS/USSTerms? VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)? RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)? PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)? USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)一般来说内存占用大小有如下规律:VSS &= RSS &= PSS &= USSUSS is the total private memory for a process, i.e. that memory that is completely unique to that process.USS is an extremely useful number because it indicates the true incremental cost of running a particular process. When a process is killed, the USS is
the total memory that is actually returned to the system. USS is the best number to watch when initially suspicious of memory leaks in a process.四、dumpsysdumpsys meminfo&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Applications Memory Usage (kB):Uptime: 1031937 Realtime: 0Total PSS by process:&&& 44049 kB: com.skyworth.launchersky_app_home (pid 911)&&& 16839 kB: system (pid 791)&&& 12835 kB: com.skyworth.standardservices (pid 1310)&&& 11233 kB: com.android.wallpaper (pid 881)&&&& 9791 kB: com.skyworth.sky_app_atv (pid 1018)&&&& 9782 kB: android.process.media (pid 1232)&&&& 9622 kB: com.skyworth.hotkey (pid 1666)&&&& 9279 kB: com.android.systemui (pid 866)&&&& 7400 kB: com.android.email (pid 1265)&&&& 7318 kB: com.mstar.tv.service (pid 1246)&&&& 6980 kB: com.skyworthdigital.stb.dataprovider (pid 1335)&&&& 5808 kB: com.android.exchange (pid 1286)&&&& 4923 kB: com.android.inputmethod.pinyin (pid 892)&&&& 4351 kB: com.android.providers.calendar (pid 985)&&&& 4132 kB: com.android.calendar (pid 961)&&&& 3548 kB: com.android.deskclock (pid 1059)Total PSS by OOM adjustment:&&& 16839 kB: System&&&&&&&&&&&&&& 16839 kB: system (pid 791)&&&& 9279 kB: Persistent&&&&&&&&&&&&&&& 9279 kB: com.android.systemui (pid 866)&&& 44049 kB: Foreground&&&&&&&&&&&&&& 44049 kB: com.skyworth.launchersky_app_home (pid 911)&&& 11233 kB: Visible&&&&&&&&&&&&&& 11233 kB: com.android.wallpaper (pid 881)&&& 25076 kB: Perceptible&&&&&&&&&&&&&& 12835 kB: com.skyworth.standardservices (pid 1310)&&&&&&&&&&&&&&& 7318 kB: com.mstar.tv.service (pid 1246)&&&&&&&&&&&&&&& 4923 kB: com.android.inputmethod.pinyin (pid 892)&&&& 6980 kB: A Services&&&&&&&&&&&&&&& 6980 kB: com.skyworthdigital.stb.dataprovider (pid 1335)&&&& 9791 kB: Previous&&&&&&&&&&&&&&& 9791 kB: com.skyworth.sky_app_atv (pid 1018)&&& 44643 kB: Background&&&&&&&&&&&&&&& 9782 kB: android.process.media (pid 1232)&&&&&&&&&&&&&&& 9622 kB: com.skyworth.hotkey (pid 1666)&&&&&&&&&&&&&&& 7400 kB: com.android.email (pid 1265)&&&&&&&&&&&&&&& 5808 kB: com.android.exchange (pid 1286)&&&&&&&&&&&&&&& 4351 kB: com.android.providers.calendar (pid 985)&&&&&&&&&&&&&&& 4132 kB: com.android.calendar (pid 961)&&&&&&&&&&&&&&& 3548 kB: com.android.deskclock (pid 1059)Total PSS by category:&&& 56161 kB: Dalvik&&& 30951 kB: Native&&& 28795 kB: Unknown&&& 24122 kB: .so mmap&&& 18489 kB: .dex mmap&&&& 7047 kB: Other mmap&&&& 1109 kB: .ttf mmap&&&& 1036 kB: .apk mmap&&&&&& 88 kB: Other dev&&&&&& 52 kB: Ashmem&&&&&& 24 kB: .jar mmap&&&&&& 16 kB: CursorTotal PSS: 167890 kB转自:http://blog.csdn.net/kieven2008/article/details/6445421
以上就介绍了Android: 系统单个进程内存、CPU使用情况的几种方法,包括了方面的内容,希望对Android开发有兴趣的朋友有所帮助。
本文网址链接:/article/detail_102412.html
上一篇: 下一篇:有很多同学表示,自己的机子开机内存怎么只有200m啦,用一会怎么就变成100多m啦,怎么有很多程序在后台关都关不了啦。回答了很多遍,实在是麻烦,在这里开个贴解释一下。首先你要知道Android系统是基于Linux&2.6内核开发的开源操作系统(linux是啥都不知道自己去百度吧),而linux系统的内存管理有其独特的动态存储管理机制。不过Android系统对Linux的内存管理机制进行了优化,Linux系统会在进程活动停止后就结束该进程,而Android把这些进程都保留在内存中,直到系统需要更多内存为止。这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度。如果你懂java,就会更容易理解Android系统的内存管理机制。与java的垃圾回收机制类似,系统有一个规则来回收内存。进行内存调度有个阈值,只有低于这个值系统才会按一个列表来关闭用户不需要的东西。Android系统有六类进程:前台进程、可见进程、次要服务、后台进程、内容供应节点、空进程。对于高手而言可以用MinFreeManager之类的软件进行进程管理,分别为六类进程设定不同的阈值来操纵系统的内存分配机制。不过对于一般用户而言,Android系统默认的分配机制已经可以满足使用需要,因此也不需要再去调整。对于一些内存很低的低端Android机而言,系统默认的内存分配机制无法实现很完善的内存调配。所以在运行大型游戏时需要先清理一下内存。然而对于我们的DEFY而言,512m的总内存和几十m的空余内存已经可以充分的满足系统自动调配的需要,因此完全没有必要老去杀进程、清内存。有的兄弟说后台挂着程序很费电,事实上Android的应用在被切换到后台时,它其实已经被暂停了,并不会消耗cpu资源,只保留了运行状态。至于QQ、音乐播放之类的程序可以在后台运行,是因为这些程序在后台开启了服务,而服务可以后台运行,所以没有带服务的应用在后台是完全不耗电的,没有必要关闭。这种设计本来就是一个非常好的设计,下次启动程序时,会更快,因为不需要读取界面资源。Android系统这样的设计不仅非常适合移动终端的需要,而且减少了系统崩溃的可能,确保了系统的稳定性。老想着清理内存的同学完全是因为被塞班或者Windows毒害太深,事实上,经常用Taskiller之类的软件关闭后台所有进程,很容易造成系统的不稳定。很多时候出现问题,只要重启就能解决,其原因也在于此。说了这么多,总结起来很简单,牛B的人自己去操纵系统内存分配的阈值,而普通用户则是想怎么用就怎么用,完全不用去鸟剩余内存的问题,那些内存清理的程序完全可以扔到一边了。PS:1.按home退出,程序保留状态为后台进程;按返回键退出,程序保留状态为空进程。空进程的oom_adj评值高于后台进程,更容易被系统清理。所以推荐用返回键退出。2.UC、愤怒小鸟、都市赛车之类程序本身提供关闭功能的,还是尽量主动关闭。浏览器、电子市场、opera&mini等不提供关闭功能的,直接返回键退出就行。&&&&我想每个人第一次用Android的时候,不可避免的会去装个任务管理器,然后对里面时刻都停留着一大堆的程序表示触目惊心,然后会在桌面上建立一个快捷清空内存的按钮,时不时啪的按一下,看着内存剩余数量从30多变成100多然后很有快感...其实吧,Android是Linux的内核,每一个程序都是一个独立的JAVA虚拟机,就和油汤里的油花一样互不干扰,这样充分保证了万一某个程序的JAVA虚拟机崩溃,系统依旧稳定正常运行.而Android和传统Linux不一样的地方又在于,传统Linux在进程活动停止后就结束了,这就类似于我们用S60和WM一样,关闭程序,内存释放.而Android会把这些进程保留在内存里,干嘛呢?为了保证你再次激活这些进程时候启动的更快,比如说我们挂在桌面的Widgets,具体一点我们拿新浪微博举例吧.我刚看完,退出,突然我想我发一条微博吧,那么这个时候我可以直接在桌面Widgets上操作----设想一下如果我退出的时候这个进程就终止了,那么我在桌面上点击Widgets的时候会不会卡顿一下甚至没有响应?----这就跟我们把Widgets挂在桌面的行为完全背离了,放在桌面上就是为了能随时观察到程序运行的情况,以及随时可以快速调用程序.所以Android并没有在进程活动停止就释放对应的内存.那么也许你还是会有疑问,那么内存够不够用呢?512的内存被我用的只剩56M是不是很恐怖?其实系统一点也不卡的,蛋定蛋定是的,我理解,因为大家这么多年Windows都用习惯了,Windows内存不足的时候机器卡的会让你想砸掉机箱,而且调用虚拟内存的时候硬盘喀喀喀想的让你肉疼.你肯定也会怕你的手机明明512M内存结果就剩下30来M把你卡到崩溃.事实上呢,Android会在系统需要更多内存的时候,去释放掉那些占用内存的进程----这个活动是智能的.最早大家认为是有个排序,比如最近使用过哪些程序(LRU机制,Last&Recently&Used),然后结束最早的进程.不过并非如此,否则就变成我们上小学时候那样,个子高的块头大的男生跟班长下去拔草扛新书,女生们留在班里绣花吧...这样很明显不公平而且没准会结束掉那些我们并不想结束掉的进程----譬如说这会儿我想切回到刚才后台的网页继续浏览结果悲怆的发现它被系统给我强制关闭了...Android把进程分成了一些优先级,比如  前台进程(Foreground),比如我们正在看书,那么看书的程序就是前台进程,这些进程是不会被系统优先结束的.当我把它切到后台的时候,它就变成后台进程了.  还有可见进程(Visible),这个怎么说呢,譬如输入法程序,你平时是看不见它的,但是在你打开输入界面的时候,它会很快的弹出来,而不是让你等啊等啊等,看不到的原因是透明度的机制,咱就不要钻牛角尖讨论为啥我看不见了...还有桌面的Widgets,比如我们的桌面时钟,这个东西就是可见的,如果它被系统终止了会有什么样的结果?这个Widgets依然会显示在桌面上,但是时针不走了...  主要服务,比如说,电话的拨号功能,你也不想正急着打电话呢结果人家给你卡半天吧,尤其像我这样联系人上2000的,载入一遍真的很慢啊...所以这些主要服务平时也不会被系统自动结束,除非你非要关它,关了也会自己重新加载的.这也是你完全释放内存以后过一会就看着内存可用值又慢慢降低的原因.  次要服务(secondary&server),诸如谷歌企业套件,Gmail,联系人,看着这些程序出现在任务管理器里可能你会非常的莫名其妙,丫的这都哪跟哪啊我没开啊...其实它们和一些系统功能也是息息相关的,比如Gmail的邮件推送,我们时常需要用到它们,所以系统也太会去终止它们.甚至于HTC机器上著名的HTC&Sense,这个也是次要服务,但是其实它承接着整个系统界面的运行,所以,如果你强行关闭所有进程的时候,你的屏幕会变成一片白...然后慢慢等HTC&Sense加载.  后台进程(hidden),就是我们通常意义上理解的启动后被切换到后台的进程,比如如浏览器和阅读器.后台进程的管理策略有多种,但是一般来讲,系统都会视内存情况,尽可能多的保留后台程序,这样会影响到你启动别的程序的运行速度----我想这个很好理解,因为内存确实不够了,而且你还没让系统自动释放内存.但好处是,你再次切换到这些已启动的程序时几乎是无缝的,速度绝对比你从0开始启动它要快得多.所以,这种后台进程在内存极度不够的时候,肯定会被系统选择性的干掉的.  内容供应节点(content&provider),没有程序实体,仅提供内容供别的程序去用的,比如日历供应节点,邮件供应节点等.在系统自动终止进程时,这类程序享有优先的被干掉权...  空进程(empty),没有任何东西在内运行的进程,有些程序在退出后,依然会在进程中驻留一个空进程,这个进程里没有任何数据在运行,作用往往是提高该程序下次的启动速度或者记录程序的一些历史信息.这部分进程无疑是系统最先终止的.说了这么多,其实还是要结合实际的程序来看一下的,比如Android这个很有名的自动内存调配的软件,Auto&Memory&Manager,它的设置和帮助界面就如上面所说的,它自动提供了多种默认配置,例如极速模式,这个模式下,会帮助你在设定好的临界值区间上,结束空进程以及内容供应节点等等低优先级保留权的进程,来给你腾出更多的内存,加速新运行程序打开的速度,但是它也说明了这种模式的弊端,就是一些可能你不想被关闭的进程会被过早的关闭,比如说,闹钟----在G2&G3还很火爆的2009年,很多用户在买完手机后给我抱怨,哎呀这个机器闹钟怎么老不响啊...上班老迟到...其实这就是因为手动结束进程的时候结果把闹钟也给干掉了.系统的时间是会一直走的,这属于主要服务,而闹钟呢,只是主要服务的一个附属品,所以被结束后,是不会自动被启动的,既然没有启动自然就不会响了.与此类似的例子就是里程碑不充电的BUG,这是因为Moto的机器里有个USB的进程,如果你把它结束后,理论上会重新启动的但是也会不启动,后面这种情况出现的结果就是你插充电器没反应,插数据线连电脑没反应...重启手机就好了.当然我知道大家的洁癖很多,有的人就是见不得内存值太小...好吧如果你不想一些被系统认为不太重要而你又很需要的进程被你自己亲手扼杀的话,那么我推荐你使用高级任务管理器这个程序,你可以把一些进程自动隐藏起来,也就是说当你挥起狼牙棒横扫一堆进程的时候,你设置好的几个进程是不会受任何影响的,比如桌面Launcher,比如闹钟,比如USB,等等等等.但话说回来,我是不建议大家去手动管理Android的内存,也许你会不习惯----我也没啥好劝告的,总之,不要把你的智能机想的那么笨就行了.刚才全杀掉进程后,过了一会,我的DEFY又变成剩余60M内存,还是没啥鸭梨啊...如果你感兴趣可以做个试验,内存很少的时候,你打开一个大游戏,然后退出,你会发现...当然这只是理论,这与系统优化是有关系的,与手机内存大小也有关系的。上文是用defy举例,defy的内存是512,而我们的desire&s的内存是768,整整是defy的1.5倍。moto的优化也不错,哪怕当年里程碑256的内存也没有很卡,当然我们ds的优化也很好,首先是内存大,所以开机时剩余能有近400兆,如果这时候杀杀内存就能有400多。而我就是不停的用,从没用到100以下,一般在200多。有些优化的比较差的就不同了,比如魅族M9,它的内存是512,但用到100以下就会很卡。在神坛里也有人发关于安卓内存管理的帖子,可是人家不听理论,要的是实际效果。所以需要杀杀进程。实际比理论重要,这话没错。如果觉得你的手机可能是因为内存不够了而卡,那就杀杀吧,如果有效的话。iphone的内存体制不清楚,可是根据苹果的封闭方针,一般也很难看到剩余内存而产生恐惧感。而安卓不同,有一大堆的内存监视插件、软件,刚开始时用户从其他系统转过来,不知道这个内存释放体制,看到这么点内存就想着方法去杀,然后就有这么多的内存管理软件、杀进程软件了。单看理论,抛开实际,可以说,安卓的内存危机,纯粹是被那几个实时显示的数字给吓出来的
您需要登录后才可以发帖
其他登录方式:2952人阅读
linux(53)
android(72)
由于android是基于linux系统的,下面使用的是ptrace监视其他进程的方式进行内存窥视的。
1、被监视进程
test_addr.c
#include &stdio.h&
#include &sys/ptrace.h&
static uint16_t test = 0x17
int main(int argv , char **argc){
printf(&test address = %p\n& , &test) ;
sleep(1000) ;
return 1 ;
copy编译后的可执行文件test_addr到手机/data/local/tmp目录chmod 755 /data/local/tmp/test_addr/data/local/tmp/test_addr查看打印的test变量地址。本人的地址是(test address = 0x90e0)ps 查看所有进程,找到test_addr对应的进程号。本人的是8124查看进程的地址空间ps /proc/8124/maps,如下:
09000 r-xp :1a 261968
/data/local/tmp/test_addr
0a000 rw-p :1a 261968
/data/local/tmp/test_addr
01e00 rw-p :00 0
b6f0a000-b6f0b000 r--p :00 0
b6f0b000-b6f1c000 r--s :0b 5875
/dev/__properties__
b6f1c000-b6f34000 r-xp :17 2066
/system/lib/libm.so
b6f300 r--p :17 2066
/system/lib/libm.so
b6f300 rw-p :17 2066
/system/lib/libm.so
b6f300 r-xp :17 2298
/system/lib/libstdc++.so
b6f300 r--p :17 2298
/system/lib/libstdc++.so
b6f300 rw-p :17 2298
/system/lib/libstdc++.so
b6f3f000 r-xp :17 1844
/system/lib/libc.so
b6f7f000-b6f81000 r--p :17 1844
/system/lib/libc.so
b6f800 rw-p :17 1844
/system/lib/libc.so
b6f800 rw-p :00 0
b6f900 r--p :00 0
b6f900 r-xp :17 592
/system/bin/linker
静态初始化变量test应该存放在数据段,上面标红的那一行。地址空间是
2、监视进程:
search_mem.c
#include &stdio.h&
#include &sys/ptrace.h&
int main(int argv , char **argc){
int pid = atoi(argc[1]) ;
ptrace(PTRACE_ATTACH, pid, NULL, NULL) ;
wait(&stat) ;
// 如果不wait,马上进行下一个ptrace的PEEK操作会造成 no such process 错误
int addr = 0x ;
for (; addr & 0x; ++addr)
data = ptrace(PTRACE_PEEKDATA, pid, addr, NULL);
// 一次读一个字节
if(data == 0x17 || data == 0xce){
printf(&data = %x , addr = %x\n& , data , addr) ;
ptrace(PTRACE_DETACH, pid, NULL, NULL);
return 1 ;
对上面的代码稍微解释一下,其实很简单:
ptrace:PTRACE_ATTACH表示我们要attach到一个进程上,pid为我们要监视的进程id(本文为8124)。ptrace:PTRACE_PEEKDATA,每次返回一个字节,addr标示我们要获取的data的内存地址。我们循环所有数据段的内存,来查找内容为0x17ce的变量地址是多少(本文地址范围为)。
编译search_mem.c
copy编译后的可执行文件到/data/local/tmp/search_mem
chmod 755&/data/local/tmp/search_mem
执行:/data/local/tmp/search_mem
本人的执行结果如下:
data = 17 , addr = 9030
data = ce , addr = 90e0
data = 17 , addr = 90e1
很明显内容是0x17ce的变量地址应该是0x。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:298250次
积分:3819
积分:3819
排名:第5587名
原创:69篇
转载:138篇
评论:43条
(1)(1)(2)(5)(1)(1)(8)(2)(1)(7)(3)(5)(7)(3)(8)(5)(6)(2)(2)(8)(12)(5)(11)(11)(29)(1)(3)(22)(20)(15)(2)(12)(1)(1)(2)}

我要回帖

更多关于 android 进程常驻内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信