GDB如何去看物理記憶體
各位先進好想請教各位當MMU啟動之後
在使用GDB時,可否能指定看物理記憶體? 回复 1# wth0722
你是香港还是台湾的?
物理地址通过/dev/mem去看吧。打开/dev/mem然后进行mmap就可以访问了。
回复 2# Tinnal
我是台灣人
你有點誤會我的意思了
我想要的是直接可以透過GDB去修改或是看物理位置裡面的內容
就像是trace32的A:0x12345678這個指令
回复 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的命令。
只能没有弄清楚你真正想干什么,只能猜测。
我觉得LZ是想在GDB中看已经映射好物理区间内存储的内容吧。
我也遇到过这样的问题,只能在进程在的时候看。
coredump文件,那个映射过来的虚拟地址看不到。 说的是怎么直接查看内存吗?
p *0x地址
这样? 回复 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,並沒有接其他硬件訪真器,所以想要問各位這樣可以看到物理位置嗎 回复 6# MeRcy_PM
你得到他了
就是想要P * 0x位置 <--這位置希望是physical address,不是Virtual address
我不知道gdb是否有.不过你自己可以使用mmap函数写一个操作物理地址的应用. qemu有命令直接看物理地址
先按alt+ctrl+2 进入qemu的调试界面,好像是xp指令可以直接看物理地址的内容
页:
[1]
2