一文剖析内核调试之devmem直接读写寄存器
分享内核 - devmem depugity的效用。许多经常在下面做司机的人使用它。
DevMem是一个命令,并在外壳中输入DevMem命令可以轻松读取和写入寄存器。
在Linux系统中,如果要访问寄存器,我们必须编写驱动程序,在驱动程序中映射寄存器的寄存器,然后在将其转换为虚拟地址后访问您。
但是有时候,我们只想知道某个登记册的价值,我们不想变得如此问题。
我们该怎么办? Linux已经考虑了很长时间,因此它提供了一个DevMem工具,可以通过该工具直接读取和写入寄存器。
DevMem命令的格式如下:地址:物理地址宽度:位宽度,3 2 位,6 4 位等。
值:例如,要编写的值,例如,阅读3 2 位寄存器的值0x4 02 000000:Devmem0x4 0x4 000000003 2 写0x1 2 3 4 5 6 7 8 至3 2 -BIT寄存器0x4 00000000000000000000000000000000000000000000000000000000000000000000000来DevMem0x4 0x4 00003 2 :DevMem0x4 0x4 0x4 03 2 0x1 2 3 4 5 6 7 8 可以看到,DevMem的使用非常简单,并且对于DevMem,您可以访问寄存器。
DevMem命令取决于设备 /dev /mem的节点,并且必须在Linux内核中打开配置 /dev /mem。
除了直接使用DevMem外,我们还可以在Linux应用程序的级别中实现DevMem。
DevMem的实现原则是打开 /dev /mem,然后通过MMAP映射物理地址以制作阅读寄存器和写入。
因此,只要我们实施这些操作,我们就可以单独实施类似于DevMem的功能。
例如,在Linux应用程序级别中,具有0x4 0000000物理地址的读取值:void*mem = mmap(null,1 ,prot_read | prot_writ,map_shared,open,open(“/dev/mem”,o_rdwr),0x4 0000000); unsignedDivalue =(*(volatileinind*); MunMap(munmap)总而言之,DevMem是一种非常常用的工具,主要用于调试驱动程序开发人员,在Linux应用程序级别中使用。
DevMem不仅是访问权限寄存器。
只要您有许可即可访问物理地址,您就可以使用DevMem来设置DevMem。
c语言读取寄存器的值
在C-语言中,您可以使用内联安装来获取寄存器的值。不同的编译器使用内联安装不同的方法。
在VC/VS中使用内联安装的关键是__ASME,在GCC中使用内联安装的关键字是ASM。
以VC6 .0和IA3 2 CPU为示例,提取一般寄存器EAX,EBX,ECX和EDX的值。
#include