
如果你不是要编程的话,用WinHex或者任何一款游戏修改器(Game Master,FPE,金山游侠等)都可以。
如果你是指编程,用API函数ReadProcessMemory/WriteProcessMemory。
#include<stdlibh>
#include<stringh>
int copymem(voidsouceptr,voiddestptr,int infolen)
{
return memcpy(destptr,souceptr,infolen);// 复制源去目标地址,位数为Infolen
}
使用fopen的r方式可以实现读取,用w+方式可以实现写入。
1fopen的函数原型:FILE fopen(const char path,const char mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
这个要看你要读取哪些程序的内存空间。因为不同程序的内存空间开辟位置是不一样的。
类似的程序比较早的有金 山 游 侠。专门读取游程序内存数据的。
当然你也可以创建一个内存 钩 子 来实时 监 听 某程序的启动然后去读取它调用的内存空间。不过这种方法容易被杀毒软件误认为是威胁软件。
1、获得函数的地址
函数名实际上就是指针,所以可以通过强制类型转换来获取函数的地址。
int i = 0;
i = (int)main;
printf(“%d\n”,i);
这样我们就获取了main函数的地址了,其他的自定义的函数也是同样的道理啊。
2、获取变量地址
int variab = 0;
int addrvar = 0;
addrvar = (int)&variab;
在变量addrvar中保存了变量variab的地址。
3、获得数组的地址
数组本身就是指针,它本身就是内存地址,和获得函数地址的方法一样啊。比如
int array[10];
int addrarr;
addrarr = (int)array;
要读取内存数据的话,只能通过指针,你只能通过自己定义一个int的指针,让他指向一个内存地址,然后通过指针的形式读出来。
你说的“我不想通过指针变量来直接输出该int数据的值,而是想直接读取内存的数据,看看和我定义的int数据值是否相同。”是没意义的,就好像你要确定我这个人是不是我这个人一样,如果你一定要写的话,可以写成这样。
#include<stdioh>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;
int m,n;
m=adda;
n=addb;
//printf("m=%d\t,n=%d\n",m,n); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里的m和n已经和a,b没有任何逻辑联系了,他们只是表示两个内存段的数据而已。
再明确点可以写成
#include<stdioh>
int main()
{
int a=123,b=1234567;
int adda=&a,addb=&b;//adda和addb仅仅表示两个内存地址
int contenta,contentb;
contenta=adda;
contentb=addb;//这两句的含义是两个内存地址里面的内容,他们和变量a,b没有逻辑关系
//printf("m=%d\t,n=%d\n",contenta,contentb); //这里不用指针变量直接输出int数据
printf("m=%d\t,n=%d\n",a,b);
return 0;
}
这里就是你说的比较a以及a所在的内存块(adda)里面内容是不是和a相等
以上就是关于如果读取正在运行的某一程序存在内存中的数据呀。全部的内容,包括:如果读取正在运行的某一程序存在内存中的数据呀。、求C语言内存数据读取代码、c语言怎么对程序内存进行读写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)