社区
硬件/系统
帖子详情
VC中如何得到一个变量的物理地址?
coolday365
2002-11-09 05:05:19
数据采集,需要初始化DMA控制器,需要写入内存单元的起始地址。而程序中申请的变量空间(比如char ch[100])是基于虚拟内存的,问题是怎样得到ch的物理起始地址?我需要得到该起始地址的页号及页偏移量,不知道在vc中应该用什么函数或方法能解决这个问题呢?
...全文
39
1
打赏
收藏
VC中如何得到一个变量的物理地址?
数据采集,需要初始化DMA控制器,需要写入内存单元的起始地址。而程序中申请的变量空间(比如char ch[100])是基于虚拟内存的,问题是怎样得到ch的物理起始地址?我需要得到该起始地址的页号及页偏移量,不知道在vc中应该用什么函数或方法能解决这个问题呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cbc
2002-11-09
打赏
举报
回复
没研究过,不知道,呵呵
Linux开发入门:使用gdb调试C/C++入门教程
GDB(GNU symbolic debugger)简单地说就是
一个
调试工具。它是
一个
受通用公共许可证即GPL保护的自由软件。像所有的调试器一样,GDB可以让你调试
一个
程序,包括让程序在你希望的地方停下,此时你可以查看
变量
、寄存器、内存及堆栈。更进一步你可以修改
变量
及内存值。GDB是
一个
功能很强大的调试器,它可以调试多种语言。在此我们仅涉及 C 和 C++ 的调试,而不包括其它语言。还有一点要说明的是,GDB是
一个
调试器,而不像
VC
是
一个
集成环境。你可以使用一些前端工具如XXGDB、DDD等。他们都有图形化界面,因此使用更方便,但它们仅是GDB的一层外壳。因此,你仍应熟悉GDB命令。事实上,当你使用这些图形化界面时间较长时,你才会发现熟悉GDB命令的重要性。在你调试你的程序之前,当你编译你的源程序时,不要忘了 -g 选项或其它相应的选项,才能将调试信息加到你要调试的程序
中
。例如:gcc -g -o hello hello.c 。
C/C++
中
指令、
变量
等虚拟地址与
物理地址
情况解析
本文的重点是介绍虚拟地址和
物理地址
的情况,分别说明目标文件、动态库、静态库
中
的指令、全局
变量
、局部
变量
的地址情况。
Linux系统用户态根据虚拟地址获取
物理地址
的方式
之前做项目的时候,也会遇到过根据页表,由虚拟地址翻译
物理地址
的需求,一般的做法是HACK内核,在内核
中
加入HACK代码,思路无非就是通过页表进行转换,但是现在有了一种新的方式,这种方式下,不需要HACK内核,也不需要重新编译内核,便能够根据进程的虚拟地址,
得到
它的
物理地址
,下面展开介绍。
转
vc
中
定义全局
变量
http://bbs.csdn.net/topics/380070183 http://zhidao.baidu.com/link?url=gWyCQDBOfFmRE3d8NR_DwYYBalit2j-fi35VnaFDCENTLydopo8rBYWfkkBmusiG0P1CUTLijbyZGiRa1_9pra 没有啥好的办法,在需要全局
变量
的cpp文件定义,别的地方,可以exter
滴水
中
级--物理页
物理页 唯一存储物理的寄存器 CR3 尝试挂一下物理页 想法 --> 谁说0地址编号不能读写? 思路: 1. 在
VC
6.0 写
一个
变量
,并查看这个
变量
的线性地址,通过101012转化找到
物理地址
2. 给0这个线性地址 挂上与上面这个
变量
相同
物理地址
#include "stdafx.h" #include <windows.h> int main(int argc, char* argv[]) { int x = 0x1234; printf("x: %x",&x); /
硬件/系统
2,641
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章