如何用c/c++编一个程序,向某一已知内存地址写入某值

来源:百度知道 编辑:UC知道 时间:2024/06/17 20:48:17
比如我已经知道一个内存地址为0x0099D063,我想向里面写入70这个数值,能做到么?好像Windows有内存写保护,能防止随意在内存里写入东西,能解决吗?望高人能写出程序并给出解决方案……
顺便说明,是在已知这个内存地址是在没有被使用的情况下。
lcj513110麻烦你详细说下嵌入式和那个MOV行不?我对那方面一点都不了解……
谢谢liuweilhy的说明与提示。但是……汇编?!我要倒了……我甚至只是个C++的初学者……还有哪位高手能帮帮忙啊?只要能达成目的,也不一定非要用C/C++了,汇编能简单解决的话也可以。只希望来位高人能给出程序源码解决此问题……先跪下给高人磕头啦。

对于dos:
#include <stdio.h>
void main()
{
char *p,a='a';
scanf("%x",p);
*p=a;
}
这样就可以往任意内存赋值了。这只是dos。你想破坏windows有点难。
lcj513110说的嵌入式系统指的是单片机吧。MOV是汇编语言,可以直接对内存进行操作。VC支持32位的汇编语言和C语言的混合编程。用汇编语言可以更方便地对内存进行读写。
我只学过8086和8051的汇编,不能帮你了。你可以查一下有关VC++和32位汇编语言混合编程的资料。

这个应该不可以吧,有的内存你可以写入,但是写有保护的内存当然是不能随便写入数据的了,貌似不会很容易的解决的,windows的保护还是很坚固的...

不行的 因为直接向内存赋值是很危险的行为 轻则程序出错 重则系统崩溃蓝屏
如果有这种代码编译器会提示或则警告你的 我没试过 不知道编译器会让利弄吗
我只有在嵌入式上对内存地址这节赋值 应为我是已经知道了那块内存是可以动的 但在电脑上直接对内存地址进行操作是很危险的 因为你不知道是不是有程序或系统在用这块内存或者将要使用这块内存 如果你乱改 就有可系统或程序产生严重的错误
如果直接给PC赋值估计不行 但如果是对嵌入式模拟是很简单的 通过MOV就可以了
如MOV 0xXXXXXX 1

OpenProcess
WriteProcessMemory

如果是数据段的地址,这两个API函数可以做到
你上网查找一下他们的使用方法。

如果是代码段的数据还需要获得令牌权限,关掉杀毒软件,你参考一下 王艳平 的《windows程序设计》里面有代码。