您好、欢迎来到现金彩票网!
当前位置:打鱼棋牌游戏平台 > 物理地址 >

Linux虚拟内存地址转化成物理内存地址

发布时间:2019-05-27 10:20 来源:未知 编辑:admin

  现代手机这种SOC(system on chip),因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。

  当然出于成本因素我们不会为它单独焊上一个内存颗粒,它共享了主存的一部分,比如从地址0xc0000000 - 0xc0100000 1MB的空间,此时内核(Linux运行在通用处理器上)将不再触碰这块内存。

  但是多核共享同一个地址空间也有个弊端,就是如果程序有问题(野指针,数组越界)可能会写别的core管理的内存空间,这样给我们带来的问题就是程序的值莫名其妙的被改变了。我们为了排查这种问题,才考虑把应用程序的虚拟地址转化为物理地址,进行print debug以便于统一分析。

  kernel 在2.6.25的时候加入了这样一个功能/proc/self/pagemap 也就是在每个进程的/proc里面都有一个pagemap通过读取里面的内容就可以算出当前虚拟地址对应的物理页,然后加入page_offset就可以知道当前虚拟地址对应的物理地址。

  上面的例子他们通过getchar() 阻止程序的运行,以便你有足够的时间来敲/system/bin/r命令和参数

  命令用法,上面的例子我们取了一个栈上变量的虚拟地址,转换成物理地址。然后你就可以通过/system/bin/r来读取和修改这个地址的值了。

  当然还有很多先进的比如ramdumpTrace32来实现内存地址查看,不过上面的对于一个应用来讲足够轻量级,够用就好!

  每日头条、业界资讯、热点资讯、八卦爆料,全天跟踪微博播报。各种爆料、内幕、花边、资讯一网打尽。百万互联网粉丝互动参与,TechWeb官方微博期待您的关注。

http://lotusyogacenter.com/wulidizhi/11.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有