开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 169|回复: 3
打印 上一主题 下一主题
收起左侧

[已解决] 如何检测或者判断目标进程中的内存地址是否有效?

 关闭 [复制链接]
结帖率:76% (19/25)
跳转到指定楼层
楼主
发表于 2025-4-9 17:12:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式   广西壮族自治区桂林市
20精币
如何检测或者判断目标进程中的内存地址是否有效?
例如:“程序A”要判断“程序B”中的某个内存地址是否有效。也就是跨进程判断内存地址是否有效

最佳答案

查看完整内容

[e=0].版本 2 .DLL命令 OpenProcess, 整数型, "kernel32.dll", "OpenProcess" .参数 dwDesiredAccess, 整数型 .参数 bInheritHandle, 逻辑型 .参数 dwProcessId, 整数型 .DLL命令 VirtualQueryEx, 整数型, "kernel32.dll", "VirtualQueryEx" .参数 hProcess, 整数型 .参数 lpAddress, 整数型 .参数 lpBuffer, 内存基本信息, 传址 .参数 dwLength, 整数型 .DLL命令 CloseHandle, 逻辑型, "kernel32. ...

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:50% (2/4)

签到天数: 6 天

沙发
发表于 2025-4-9 17:12:15 | 只看该作者   浙江省杭州市
  
DLL命令名返回值类型公开备 注
OpenProcess整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
OpenProcess
参数名类 型传址数组备 注
dwDesiredAccess整数型
bInheritHandle逻辑型
dwProcessId整数型
DLL命令名返回值类型公开备 注
VirtualQueryEx整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
VirtualQueryEx
参数名类 型传址数组备 注
hProcess整数型
lpAddress整数型
lpBuffer内存基本信息
dwLength整数型
DLL命令名返回值类型公开备 注
CloseHandle逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CloseHandle
参数名类 型传址数组备 注
hObject整数型
数据类型名公开备 注
内存基本信息 
成员名类 型传址数组备 注
BaseAddress整数型  
AllocationBase整数型  
AllocationProtect整数型  
RegionSize整数型  
State整数型  
Protect整数型  
Type整数型  
常量名称常量值公 开备 注
PROCESS_QUERY_INFORMATION 
MEM_COMMIT 
PAGE_READWRITE 

子程序名返回值类型公开备 注
内存地址是否有效逻辑型 
参数名类 型参考可空数组备 注
目标进程ID整数型
内存地址整数型
变量名类 型静态数组备 注
hProcess整数型 
mbi内存基本信息 
结果整数型 
hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, 假, 目标进程ID)
如果真 (hProcess = 0)
返回 ()  ' 打开进程失败

结果 = VirtualQueryEx (hProcess, 内存地址, mbi, 28)  ' 结构体大小28字节
CloseHandle (hProcess)
返回 (结果 ≠ 0 mbi.State = MEM_COMMIT 位与 (mbi.Protect, PAGE_READWRITE) ≠ 0)
  
子程序名返回值类型公开备 注
获取内存详细信息文本型 
参数名类 型参考可空数组备 注
目标进程ID整数型
内存地址整数型
变量名类 型静态数组备 注
hProcess整数型 
mbi内存基本信息 
结果整数型 
hProcess = OpenProcess (PROCESS_QUERY_INFORMATION, 假, 目标进程ID)
如果真 (hProcess = 0)
返回 ("打开进程失败")

结果 = VirtualQueryEx (hProcess, 内存地址, mbi, 28)
CloseHandle (hProcess)
如果真 (结果 = 0)
返回 ("地址无效")

返回 ("起始地址:" + 到文本 (mbi.BaseAddress) + #换行符 +
"区域大小:" + 到文本 (mbi.RegionSize) + " 字节" + #换行符 +
"内存状态:" + 选择 (mbi.State = 0x1000, "已提交", "保留/空闲") + #换行符 +
"保护属性:" + 取保护属性描述 (mbi.Protect))
  
子程序名返回值类型公开备 注
取保护属性描述文本型 
参数名类 型参考可空数组备 注
Protect整数型
变量名类 型静态数组备 注
结果文本型 
判断 (位与 (Protect, 0x01) ≠ 0)
结果 = "PAGE_NOACCESS"
判断 (位与 (Protect, 0x02) ≠ 0)
结果 = "PAGE_READONLY"
判断 (位与 (Protect, 0x04) ≠ 0)
结果 = "PAGE_READWRITE"
判断 (位与 (Protect, 0x08) ≠ 0)
结果 = "PAGE_WRITECOPY"
判断 (位与 (Protect, 0x10) ≠ 0)
结果 = "PAGE_EXECUTE"
判断 (位与 (Protect, 0x20) ≠ 0)
结果 = "PAGE_EXECUTE_READ"
判断 (位与 (Protect, 0x40) ≠ 0)
结果 = "PAGE_EXECUTE_READWRITE"
结果 = "未知属性"

返回 (结果 + " (0x" + 取十六进制文本 (Protect) + ")")

补充内容 (2025-4-9 19:39):
三个常亮分别是0x0400,0x1000,0x04

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:100% (53/53)

签到天数: 14 天

板凳
发表于 2025-4-9 17:21:12 | 只看该作者   福建省宁德市
进程句柄 = OpenProcess()'打开目标进程

返回值=VirtualQueryEx(进程句柄,内存地址,相关结构,结构大小)
返回值为零表示失败,进程句柄无效,内存地址无效等。
否则通过 相关结构可以得到该内存的相关信息
可以看下微软的API文档,有详细说明
https://learn.microsoft.com/zh-c ... redirectedfrom=MSDN

评分

参与人数 1好评 +1 精币 +2 收起 理由
e688 + 1 + 2 感谢分享,很给力!~

查看全部评分

回复

使用道具 举报

结帖率:91% (20/22)

签到天数: 3 天

地板
发表于 2025-4-9 17:44:27 | 只看该作者   北京市北京市
  
子程序名返回值类型公开备 注
内存地址是否有效逻辑型 
参数名类 型参考可空数组备 注
进程ID整数型
内存地址整数型
变量名类 型静态数组备 注
进程句柄整数型 
测试缓冲区字节集 
实际读取长度整数型 
进程句柄 = OpenProcess ( #PROCESS_VM_READ, 假, 进程ID)
如果真 (进程句柄 = 0)
调试输出 ("打开进程失败,错误代码:", GetLastError ())
返回 假

测试缓冲区 = 取空白字节集 (1)
是否有效 = ReadProcessMemory (进程句柄, 内存地址, 测试缓冲区, 1, 实际读取长度)
CloseHandle (进程句柄)
返回 是否有效
' API声明
DLL命令名返回值类型公开备 注
OpenProcess整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
OpenProcess
参数名类 型传址数组备 注
dwDesiredAccess整数型
bInheritHandle逻辑型
dwProcessId整数型
DLL命令名返回值类型公开备 注
ReadProcessMemory逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
ReadProcessMemory
参数名类 型传址数组备 注
hProcess整数型
lpBaseAddress整数型
lpBuffer字节集
nSize整数型
lpNumberOfBytesRead整数型
DLL命令名返回值类型公开备 注
CloseHandle逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
CloseHandle
参数名类 型传址数组备 注
hObject整数型



i支持库列表   支持库注释   
spec特殊功能支持库
kernel32(未知支持库)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表