如果读取正在运行的某一程序存在内存中的数据呀。

如果读取正在运行的某一程序存在内存中的数据呀。,第1张

如果你不是要编程的话,用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语言怎么对程序内存进行读写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9692186.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存