免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3520 | 回复: 11
打印 上一主题 下一主题

[其他] GDB如何去看物理記憶體 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-25 22:24 |只看该作者 |倒序浏览
各位先進好

想請教各位當MMU啟動之後

在使用GDB時,可否能指定看物理記憶體?

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-08-25 22:35 |只看该作者
回复 1# wth0722
你是香港还是台湾的?
物理地址通过/dev/mem去看吧。打开/dev/mem然后进行mmap就可以访问了。


   

论坛徽章:
0
3 [报告]
发表于 2014-08-26 10:12 |只看该作者
回复 2# Tinnal

我是台灣人

你有點誤會我的意思了

我想要的是直接可以透過GDB去修改或是看物理位置裡面的內容

就像是trace32的A:0x12345678這個指令



   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-08-26 12:00 |只看该作者
回复 3# wth0722

你是否可以把你的问题再描述一下。

你指的“物理位置”是指内存的物理地址(physical address)还是虚拟地址(virtual address )?

trace32是硬件的仿真器,他看到是硬件的内存,它不区分操作系统和应用程序,把他们都当无操作系统的程序来进行调试了。如果CPU打开MMU后,认像当中它看到的,也已经是virtual address了。如果要确定性的访问某一个physical address, 需要自己跟具页表转换。特别的,如果是内核线性区的内存,可以看一下对应内核的__pa宏,通过virtual address 减一个固定值就是physical address了。

GDB是一款Linux应用程序的调试软件,一般只会用来调试应用。一般我们不会关心程程序分配到的物理地址,因为应用分配到的页框(Page frame)是不确定的,我们一般只关系他们的虚拟地址。如果要改变某个虚拟地址的值,
可以通过 set var 变量名 = 变量值 得方式。 如查想改变的不是一个变量,而是一个直接的虚拟地址 可以采用如 set *(char *) 变量地址 = 变量值 的方式。

如果想把GDB拿来做硬件仿真器的后端,可以和jlink等仿真器配合使用, jlink有一个服务程序可以仿真成为GDB的一个remote-target。jlink提供了很多类trace32的直接操作CPU的命令。


只能没有弄清楚你真正想干什么,只能猜测。

   

论坛徽章:
2
天蝎座
日期:2014-07-23 21:17:122015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2014-09-01 14:21 |只看该作者
我觉得LZ是想在GDB中看已经映射好物理区间内存储的内容吧。
我也遇到过这样的问题,只能在进程在的时候看。
coredump文件,那个映射过来的虚拟地址看不到。

论坛徽章:
7
天秤座
日期:2014-08-07 13:56:30丑牛
日期:2014-08-27 20:34:21双鱼座
日期:2014-08-27 22:02:21天秤座
日期:2014-08-30 10:39:11双鱼座
日期:2014-09-21 20:07:532015年亚洲杯之日本
日期:2015-02-06 14:00:282015亚冠之大阪钢巴
日期:2015-11-02 14:50:19
6 [报告]
发表于 2014-09-03 17:03 |只看该作者
说的是怎么直接查看内存吗?
p *0x地址
这样?

论坛徽章:
0
7 [报告]
发表于 2014-09-10 09:53 |只看该作者
回复 4#你是否可以把你的問題再描述一下。

你指的「物理位置」是指內存的物理地址(physical address)還是虛擬地址(virtual address )?

trace32是硬件的仿真器,他看到是硬件的內存,它不區分操作系統和應用程序,把他們都當無操作系統的程序來進行調試了。如果CPU打開MMU後,認像當中它看到的,也已經是virtual address了。如果要確定性的訪問某一個physical address, 需要自己跟具頁表轉換。特別的,如果是內核線性區的內存,可以看一下對應內核的__pa宏,通過virtual address 減一個固定值就是physical address了。

GDB是一款Linux應用程序的調試軟件,一般只會用來調試應用。一般我們不會關心程程序分配到的物理地址,因為應用分配到的頁框(Page frame)是不確定的,我們一般只關係他們的虛擬地址。如果要改變某個虛擬地址的值,
可以通過 set var 變量名 = 變量值 得方式。 如查想改變的不是一個變量,而是一個直接的虛擬地址 可以採用如 set *(char *) 變量地址 = 變量值 的方式。

如果想把GDB拿來做硬件仿真器的後端,可以和jlink等仿真器配合使用, jlink有一個服務程序可以仿真成為GDB的一個remote-target。jlink提供了很多類trace32的直接操作CPU的命令。


只能沒有弄清楚你真正想幹什麼,只能猜測。
Tinnal



我所謂的物理位置就是Physical address

我想要的就是從GDB上直接看Physical memory上面的內容

目前是直接使用Qemu+gdb,並沒有接其他硬件訪真器,所以想要問各位這樣可以看到物理位置嗎

论坛徽章:
0
8 [报告]
发表于 2014-09-10 09:55 |只看该作者
回复 6# MeRcy_PM


你得到他了

就是想要  P * 0x位置     <--這位置希望是physical address,不是Virtual address

   

论坛徽章:
0
9 [报告]
发表于 2014-09-10 10:31 |只看该作者
我不知道gdb是否有.不过你自己可以使用mmap函数写一个操作物理地址的应用.

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
10 [报告]
发表于 2014-09-10 11:16 |只看该作者
qemu有命令直接看物理地址
先按alt+ctrl+2 进入qemu的调试界面,好像是xp指令可以直接看物理地址的内容
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP