| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4475 人关注过本帖
标题:汇编崩溃问题 求教解决办法
只看楼主 加入收藏
ch2202111
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-17
结帖率:0
收藏
 问题点数:0 回复次数:4 
汇编崩溃问题 求教解决办法
push eax
MOV eax, DWORD_PTR[地址]
MOV eax, DWORD_PTR[eax]
MOV 值, eax
pop eax
这段代码 一碰到不可读的内存程序就崩溃了
哪位老大帮帮我啊 坐等 有没有什么好办法解决
2016-05-24 15:14
AXRZ
Rank: 2
等 级:论坛游民
威 望:5
帖 子:48
专家分:84
注 册:2016-3-23
收藏
得分:0 
在WINDOWS下如果你想访问其他程序的内存区域要调用OpenProcess(),ReadProcessMemory()等API,而且目标程序的内存区域必须是可读的,否则出错是很正常的

如下代码在WINDOWS下会被视为访问非法区域:
MOV EAX,[0000]
因为你的程序在访问其段选择子外的内容

能不能访问你的那个“地址”的位置, 取决于这个位置在全局描述符表里声明是否是对外可读或可写的

操作系统通过全局描述符表来限制程序能访问的内存区域,若你试图访问其之外的区域会触发中断;在WIN下这个中断会终止程序的运行并显示错误,这么做是出于安全考虑

那么回到你的代码中:
MOV EAX,DWORD PTR [地址]        ;如果此地址是可读的,此代码不会出错
MOV EAX,DWORD PTR [EAX]         ;如果[地址]中存着的地址是可读的,这条指令不会出错

[此贴子已经被作者于2016-5-25 01:35编辑过]

2016-05-25 01:33
zhulei1978
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
全局描述符表GDT(Global Descriptor Table)
          GDTR
-----------------------
|32位基地址|16位的界限|
-----------------------

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-05-25 07:39
ch2202111
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-10-17
收藏
得分:0 
我要怎么查看全局描述表里对应的内存是否可读写?  能不能给个例子 各位大侠们  帮帮忙
2016-05-25 10:17
AXRZ
Rank: 2
等 级:论坛游民
威 望:5
帖 子:48
专家分:84
注 册:2016-3-23
收藏
得分:0 
回复 4楼 ch2202111
全局描述符表只能由操作系统访问和管理;因此,在WIN32下检测内存是否可读需要用到系统API(当然有部分系统DLL是对外可读的)
如下用API OpenProcess来检测PID600程序的内存区域是否可读(准确的说是试图获取可读权限):
HANDLE WINAPI OpenProcess(
  _In_ DWORD dwDesiredAccess,
  _In_ BOOL  bInheritHandle,
  _In_ DWORD dwProcessId
);

编译器:NASM

EXTERN OpenProcess
IMPORT OpenProcess kernel32.dll

SEGMENT .CODE USE32
..start:
PUSH DWORD 600        ;dwProcessID=600,进程PID
PUSH DWORD 0          ;bInheritHandle=0,子进程句柄继承,这里不重要
PUSH DWORD 10H        ;dwDesireAccess=PROCESS_VM_READ(10H),试图获取读取权限
CALL [OpenProcess]
TEST EAX,EAX          ;若此API成功,进程内存将可读,返回值为进程基址,反之则返回0
JNZ READABLE
....


2016-05-25 11:05
快速回复:汇编崩溃问题 求教解决办法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018209 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved