VirtualProtect内存分配访问无效。
时间:2011-12-17
来源:互联网
var
sizeVirtual: Cardinal = 4000;
lpRound: Pointer;
mbi: MEMORY_BASIC_INFORMATION;
lpAddress: Pointer;
lpStr: PAnsiChar;
dwOldAddr: PDWORD;
begin
lpRound := Pointer($100000FF);
lpAddress := VirtualAlloc(lpRound, sizeVirtual, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
if lpAddress = nil then
begin
WriteLn(format('VirtualAlloc error: %d', [GetLastError()]));
Exit;
end;
lpStr := 'hello';
WriteLn('Alloc:MEM_COMMIT|MEM_RESERVE');
CopyMemory(lpAddress, lpStr, lstrlen(lpStr));
WriteLn(format('分配,复制成功,地址:0x%.8x, 内容:%s', [DWORD(lpAddress), PAnsiChar(lpAddress)]));
VirtualQuery(lpAddress, mbi, SizeOf(mbi));
WriteLn(format('使用 VirtualQuery 获得的信息:'+#13#10+
'BaseAddress:0x%.8x AllocationBase:0x%.8x AlloctionProtect:0x%.8x RegionSize:%u State:0x%.8x Protect:0x%.8x Type:0x%.8x', [DWORD(mbi.BaseAddress), DWORD(mbi.AllocationBase), mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type_9]));
if not (VirtualProtect(lpAddress, 0, PAGE_READONLY, nil)) then
begin
WriteLn(format('VirtualProtect error: %d', [GetLastError()]));
Exit;
end;
在翻译一个VC例子,但VirtualProtect无法修改内存页属性,求解释.
VirtualProtect error: 998 (内存分配访问无效。)
sizeVirtual: Cardinal = 4000;
lpRound: Pointer;
mbi: MEMORY_BASIC_INFORMATION;
lpAddress: Pointer;
lpStr: PAnsiChar;
dwOldAddr: PDWORD;
begin
lpRound := Pointer($100000FF);
lpAddress := VirtualAlloc(lpRound, sizeVirtual, MEM_COMMIT or MEM_RESERVE, PAGE_READWRITE);
if lpAddress = nil then
begin
WriteLn(format('VirtualAlloc error: %d', [GetLastError()]));
Exit;
end;
lpStr := 'hello';
WriteLn('Alloc:MEM_COMMIT|MEM_RESERVE');
CopyMemory(lpAddress, lpStr, lstrlen(lpStr));
WriteLn(format('分配,复制成功,地址:0x%.8x, 内容:%s', [DWORD(lpAddress), PAnsiChar(lpAddress)]));
VirtualQuery(lpAddress, mbi, SizeOf(mbi));
WriteLn(format('使用 VirtualQuery 获得的信息:'+#13#10+
'BaseAddress:0x%.8x AllocationBase:0x%.8x AlloctionProtect:0x%.8x RegionSize:%u State:0x%.8x Protect:0x%.8x Type:0x%.8x', [DWORD(mbi.BaseAddress), DWORD(mbi.AllocationBase), mbi.AllocationProtect, mbi.RegionSize, mbi.State, mbi.Protect, mbi.Type_9]));
if not (VirtualProtect(lpAddress, 0, PAGE_READONLY, nil)) then
begin
WriteLn(format('VirtualProtect error: %d', [GetLastError()]));
Exit;
end;
在翻译一个VC例子,但VirtualProtect无法修改内存页属性,求解释.
VirtualProtect error: 998 (内存分配访问无效。)
作者: l0v3_y1n9 发布时间: 2011-12-17
var
tOldPoint:Cardinal;
VirtualProtect(Pointer(lpRound), sizeVirtual, PAGE_READWRITE, tOldPoint);
tOldPoint:Cardinal;
VirtualProtect(Pointer(lpRound), sizeVirtual, PAGE_READWRITE, tOldPoint);
作者: zhangqiwen 发布时间: 2011-12-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28