修改器是怎么修改其它程序的内存空间的?
今天刚学C++的类。老师说到成员变量最好都private防止类外的函数修改。由此想到修改器,怎么能修改自己所申请的内存空间外的数据呢?...
今天刚学C++的类。老师说到成员变量最好都private防止类外的函数修改。由此想到修改器,怎么能修改自己所申请的内存空间外的数据呢?
展开
3个回答
展开全部
首先,C++里面的数据保护规则只适用于编写程序代码的时段世候,比如你编写代码的时候使用类外高数访问类的私有数据,编译器握中肢会出错,直接不给你编译,一旦编译成功,那就已经不是C++能管的培袜了,因为假如你的程序够简单的话,我可以用汇编或者c编写和你一模一样的程序出来。这时候是操作系统和CPU的事了。
其次,在32位的英特尔CU上面,是不允许第3特权级的程序访问其他程序的内存数据的,有4个特权级,0.1.2.3,其中0最高,一般只有操作系统的0特权级的,比如windows或者Linux,一般驱动程序是1特权级,普通程序往往是3特权级,最低了。所以可以尝试提高特权级。或者还有调用windows的方法,WIN中也提供了一些访问进程内存空间的函数,使用这些函数就行,具体的函数名我也不知道,windows API手册上面有
其次,在32位的英特尔CU上面,是不允许第3特权级的程序访问其他程序的内存数据的,有4个特权级,0.1.2.3,其中0最高,一般只有操作系统的0特权级的,比如windows或者Linux,一般驱动程序是1特权级,普通程序往往是3特权级,最低了。所以可以尝试提高特权级。或者还有调用windows的方法,WIN中也提供了一些访问进程内存空间的函数,使用这些函数就行,具体的函数名我也不知道,windows API手册上面有
展开全部
你遇到过野指针吗?可以通键歼猜过野指针访问。
比如原程序建立的数据区中有如下定义:
int a,b,c;
你在其数据区后面增加变量定义:
int d,*p=d;
如果你知道变量d的地址与变量a的地址之间差多少个稿型字节就可以访问了,比如你知道差1024个int型数据地址偏移,你用p[-1024]就可以访问a了,操作系统会检测你的程序是否有访问原程序数据区的手段,但这也是可以绕过的,其实改锋操作系统就要通过一些手段来访问每一个程序的程序区数据区,只要你的程序也用同样的方法去访问就没问题。
比如原程序建立的数据区中有如下定义:
int a,b,c;
你在其数据区后面增加变量定义:
int d,*p=d;
如果你知道变量d的地址与变量a的地址之间差多少个稿型字节就可以访问了,比如你知道差1024个int型数据地址偏移,你用p[-1024]就可以访问a了,操作系统会检测你的程序是否有访问原程序数据区的手段,但这也是可以绕过的,其实改锋操作系统就要通过一些手段来访问每一个程序的程序区数据区,只要你的程序也用同样的方法去访问就没问题。
追问
野指针确实是一个办法,但是你说的也只是修改程序内部的变量。如果是*[p+10086]到程序外了会不会出现0xXXXXXXXX内存无法访问的问题?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是来这里作死的吗?这能改?
那请问烧饼修改器能不能修改我农业银行的存款?
那请问烧饼修改器能不能修改我农业银行的存款?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询