回复 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
....