汇编 修改本身内存 5

在A进程中,注入了Bdll,在B中,某函数if(IsBadReadPtr(address,2)){virtualprotectex(address,2,读|写|执行);}... 在A进程中,注入了B dll,

在B中,某函数
if(IsBadReadPtr(address,2))
{
virtualprotectex(address,2,读| 写| 执行 );
}
asm
{
//能读出 A进程的内存
mov eax,0x00400000
mov bh,cs:[eax]
invoke MessageBox(NULL,bh,NULL,MB_OK);

// 写内存
mov byte ptr cs:[eax],0x00

}
展开
 我来答
手机用户30358
2011-09-22 · TA获得超过420个赞
知道小有建树答主
回答量:725
采纳率:75%
帮助的人:453万
展开全部
CPU 要执行的命令不是谁给它的,是它自己到内存中去取来的,机器一加电,CS:IP 就指向了 FFFF:0000,这里存放着电脑要执行的第一条指令,以后 CS:IP 会跑到哪里去,全由它正在执行的指令的内容来决定了。

进入 debug 后,用 r 命令可以查看各寄存器的状态,譬如用 rip 可以看到 ip 所指地址,但实际此时真实的 ip 寄存器并非指向你看到的那个地址,奥妙就在这里。debug 本身也是一个程序,CPU 也在执行它的代码,当你用 R 命令查看 IP 时,此时真实 IP 所指的是 R 命令的当前代码,它显示给你的那个 IP 是 R 命令从它维护的堆栈里找给你的。可以说,debug 接管了 CPU,CPU 实际上是被 debug 控制了 ,你用它的命令查看时,它把以前保护下来的现场翻出来给你,你看到的东西是经 debug 虚拟层过滤后的结果。这就是为什么你用 R 查看 CS:IP 时不导致计算机错乱崩溃的原因。

debug 是 DOS 下的 16 位程序,它采用段:偏移量方式操作内存,所以最大只能操作 1M 内存。在实模式下,内存没有写保护,你用 debug 可以随意查看或修改内存任何重要数据(ROM 不可写除外),但在保护模式下,windows 采用分页机制管理内存,并对内存进行了写保护措施。这个时候你开个 DOS 窗口启动 debug 去看内存,实际上看到的并不是真实的内存,都是 windows 虚拟出来的垃圾信息。windows 不想让用户直接操作内存、硬盘、CPU等硬件,对这些东西都加了保护,如果用户要直接操作硬件,它要不就给出错误或拒绝或返回垃圾信息以欺骗用户。

所以,你要是想了解机器底层的秘密,最好在实模式了进行。在 windows 下去窥探底层,看到的信息往往是虚假的,可恶的 bill gates,他就是不想让用户去动影响操作系统稳定性的底层的东西。
babyrjw
2011-09-28 · TA获得超过107个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:112万
展开全部
你什么问题塞
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式