C如何直接操作指定的内存地址?

tryte 2018-08-04 11:46:41
前两天看到一个文章提到纯C是不能直接操作内存地址的,那么有什么方式能直接操作内存地址呢?或者说什么语言能做到这点?直接修改内存地址系统内核会允许吗?小白想了解一下,求大神解疑
...全文
1424 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
w472713985 2018-11-21
  • 打赏
  • 举报
回复
谢谢各位大佬的解答
weixin_39158150 2018-08-24
  • 打赏
  • 举报
回复
如果是输入指定的话,可以这样:a=指定地址的数字;int *p=(int*)a;*p即可访问。或者scanf(“%d”,&p)
qq_41985711 2018-08-06
  • 打赏
  • 举报
回复
int *p = (int *)0xffff;
这样指针p就强制指向地址为 0xffff 这片地址
这样操作风险有点大,万一是系统内存就gg
qq_41985711 2018-08-06
  • 打赏
  • 举报
回复
int *p = (int *)0xffff;
这样指针p就强制指向地址为 0xffff 这片内存
这样操作风险有点大,万一是系统内存就gg
zjjone 2018-08-06
  • 打赏
  • 举报
回复
4楼正解,如果操作虚拟地址则可以直接赋值地址的值。
zhao4zhong1 2018-08-06
  • 打赏
  • 举报
回复
MSDN98中的例子walker又名pwalk。 完整列出指定进程的内存使用情况,显示进程地址空间内容,装载哪些DLL,代码、数据、堆栈段分配在何处,可以用来检测内存泄漏,监测内存使用。http://download.csdn.net/detail/zhao4zhong1/3667896
caozhy 2018-08-05
  • 打赏
  • 举报
回复
指针就是操作内存地址,如果跨进程,需要用 ReadProcessMemory
如果要直接操作任意的物理地址,需要自己写操作系统,或者在允许这么做的操作系统(比如说dos,比如说windows 9x下的vxd)去做。
lizh1009 2018-08-05
  • 打赏
  • 举报
回复
引用 3 楼 kwanson 的回复:
[quote=引用 2 楼 kwanson 的回复:]
在linux系统上,地址分为物质地址和虚拟地址。应用使用的是虚拟地址。内核会使用建立页表,使用MMP映射到具体的物理地址。内核是不允许用户操作物理地址的,并非语言层次的问题。

抱歉,打错字了,是MMU[/quote]
吓一跳,一开始没看到你3楼的回帖,猜到了是mmu,但我还是百度了一下这个mmp,说是叫妈卖批.
kwanson 2018-08-04
  • 打赏
  • 举报
回复
引用 2 楼 kwanson 的回复:
在linux系统上,地址分为物质地址和虚拟地址。应用使用的是虚拟地址。内核会使用建立页表,使用MMP映射到具体的物理地址。内核是不允许用户操作物理地址的,并非语言层次的问题。

抱歉,打错字了,是MMU
kwanson 2018-08-04
  • 打赏
  • 举报
回复
在linux系统上,地址分为物质地址和虚拟地址。应用使用的是虚拟地址。内核会使用建立页表,使用MMP映射到具体的物理地址。内核是不允许用户操作物理地址的,并非语言层次的问题。
ma950924 2018-08-04
  • 打赏
  • 举报
回复
c也是可以直接操作内存地址的。比如malloc之后系统给及分配的内存地址可以使用指针进行赋值等操作。如果不对分配的地址释放,就会出现内存泄漏的问题。其他的也又可以直接操作内存地址的,比如ARM中 #define rWTCON (*(volatile unsigned *)0x03000000)然后在函数调用中对这地址直接赋值,rWTCON = (PCLK / (100000-1)<<8 | (3<<3));

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧