当前位置: 首页 > news >正文

有那些网站佛山免费建站公司

有那些网站,佛山免费建站公司,怎样建设个自己的网站,做机械一般做那个外贸网站背景现代手机这种SOC(system on chip)#xff0c;因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个coresystem。这样做不仅可以使用soc上的专用核…背景现代手机这种SOC(system on chip)因为功耗、Modem等功能soc上集成了很多core,他们还可以是独立的系统在运转。比如ADSP简介ADSP(Application Digital Signal Processing)就是高通的Hexagon DSP ,就是独立运转的一个coresystem。这样做不仅可以使用soc上的专用核处理专业的事情比如上面说的ADSP就可以处理音频解码当然它的DSP特性还可以处理sensor融合算法比起通用处理器(cortex a72 a53 a17 a9 a8这些核)处理效率更高更省电。当然出于成本因素我们不会为它单独焊上一个内存颗粒它共享了主存的一部分比如从地址0xc0000000 - 0xc0100000 1MB的空间此时内核(Linux运行在通用处理器上)将不再触碰这块内存。但是多核共享同一个地址空间也有个弊端就是如果程序有问题(野指针数组越界)可能会写别的core管理的内存空间这样给我们带来的问题就是程序的值莫名其妙的被改变了。我们为了排查这种问题才考虑把应用程序的虚拟地址转化为物理地址进行print debug以便于统一分析。实现kernel 在2.6.25的时候加入了这样一个功能/proc/self/pagemap 也就是在每个进程的/proc里面都有一个pagemap通过读取里面的内容就可以算出当前虚拟地址对应的物理页然后加入page_offset就可以知道当前虚拟地址对应的物理地址。pagemap需要你的应用有root权限才能使用。 #include   #include   #include   #include   #include   #include   #include   #include   #include   #include   #include   #include   // 参考  // https://www.kernel.org/doc/Documentation/vm/pagemap.txt  #define    page_map_file     /proc/self/pagemap  #define    PFN_MASK          ((((uint64_t)1)55)-1)  #define    PFN_PRESENT_FLAG  (((uint64_t)1)63)  int mem_addr_vir2phy(unsigned long vir, unsigned long *phy)  {  int fd;  int page_sizegetpagesize();  unsigned long vir_page_idx  vir/page_size;  unsigned long pfn_item_offset  vir_page_idx*sizeof(uint64_t);  uint64_t pfn_item;  fd  open(page_map_file, O_RDONLY);  if (fd0)  {  fprintf(stderr, open %s failed, page_map_file);  return -1;  }  if ((off_t)-1  lseek(fd, pfn_item_offset, SEEK_SET))  {  fprintf(stderr, lseek %s failed, page_map_file);  return -1;  }  if (sizeof(uint64_t) ! read(fd, pfn_item, sizeof(uint64_t)))  {  fprintf(stderr, read %s failed, page_map_file);  return -1;  }  if (0(pfn_item  PFN_PRESENT_FLAG))  {  fprintf(stderr, page is not present);  return -1;  }  *phy  (pfn_item  PFN_MASK)*page_size  vir % page_size;  return 0;  }  int main(int argc, char* argv[]) {  unsigned long a  0xffbbccaa;  unsigned long vir  reinterpret_cast(a);  unsigned long phy  0;  fprintf(stderr, sizeof(unsigned long):%lu, sizeof(unsigned long*):%lu, sizeof(unsigned long), sizeof(unsigned long*));  mem_addr_vir2phy(vir, phy);  fprintf(stderr, 1 vir:0x%lx, phy: 0x%lx getchar to continue, vir, phy);  getchar();  a  0x11111111;  fprintf(stderr, 2 vir:0x%lx, phy: 0x%lx getchar to continue, vir, phy);  getchar();  fprintf(stderr, 3 vir:0x%lx, phy: 0x%lx a:0x%lx, vir, phy, a);  }如何验证你需要开启kernel如下模块CONFIG_DEVMEMy关闭如下模块CONFIG_STRICT_DEVMEMn一般的Android 都有/system/bin/r(源码在system/core/toolbox/r.c)这个命令这个命令类似devmem之类的嵌入式工具通过/dev/mem(物理内存)mmap来读取物理内存的值当然你也可以修改该地址的值上面的例子他们通过getchar() 阻止程序的运行以便你有足够的时间来敲/system/bin/r命令和参数命令用法上面的例子我们取了一个栈上变量的虚拟地址转换成物理地址。然后你就可以通过/system/bin/r来读取和修改这个地址的值了。读取0x9a6f0b20地址的值 adb shell /system/bin/r 0x9a6f0b20修改0x9a6f0b20地址的值为0xffbbccaa adb shell /system/bin/r 0x9a6f0b20 0xffbbccaa源码可以直接git clone gitgithub.com:green130181/kernel-study.git工程里的 pagemap直接拷贝到aosp的任意目录然后aosp的根目录执行 source build/envsetup.sh  lunch your select  cd pagemap dir  mm之后adb push 到你的机器即可开始验证。当然还有很多先进的比如ramdump Trace32来实现内存地址查看不过上面的对于一个应用来讲足够轻量级够用就好!点赞 0
http://www.zqtcl.cn/news/101494/

相关文章:

  • 山东网站建设公司电话全球建筑设计网站
  • wordpress 站点描述国外优秀网页设计赏析
  • php红酒网站建设软件开发外包项目合作
  • 做网站的都改行做什么了上海推牛网络科技有限公司
  • 在哪里建设网站dedecms做网站注意事项
  • 垂直类网站怎么做推广互联网站的建设维护营销
  • 手机网站大全排行江西省赣州市邮政编码
  • 集团网站建设建站模板seo优化工具软件
  • 大连项目备案网站网站建设一下需要多少费用
  • 松溪网站建设做网站外包
  • sdcms网站建设模板WordPress自定义连接菜单
  • 做设计常用的素材网站外贸平台销售
  • 建网站一般最低多少钱地方门户模板
  • 网站开发虚拟主机管理系统星巴克网络营销方式
  • phpnow 搭建网站网站建设一般怎么付款
  • 网站开发三剑客湖州市南浔区建设局网站
  • 江西专业的企业网站建设公司长沙做网站找哪家好
  • 国外互联网资讯网站南宁专业网站建设公司
  • 苏州新区做网站公司pc网站建设费用
  • 做影视网站需要多少钱2003网站建设
  • 河南智能网站建设哪家好重庆在建工程项目
  • 爱站网站长工具网站查看空间商
  • 网站营销活动页面制作wordpress 只显示一个主题
  • 电子网站建设怎么做秦皇岛网站制作公司
  • 网站建站模板样例平台推广怎么做
  • 网站建设首选亿企联盟做网站宣传有用吗
  • 网站建设公司行业苏州高端网站建设咨询
  • 电商平台网站开发过程江苏省建设科技发展中心网站简介
  • 空间租用 网站开发重庆手机网站推广资料
  • 新余 网站建设网站建设行业新闻