cover

在安卓IOS上如何判断内存地址是否缺页

阅读量:3866
评论数量:49
发布时间:2022-12-30 22:28

在安卓和iOS系统中,当程序访问一个没有被加载到内存的内存地址时,就会发生缺页(page fault)。此时,系统会触发一个异常,并执行缺页处理程序来解决这个问题。通常一些游戏会将此作为判断是否内存被读取的检测方案。

image-20221230142700822

缺页简介

通常情况下,缺页处理程序会将缺页的内存地址所在的页面从磁盘中加载到内存中,然后重新执行访问内存地址的指令。但是,如果内存地址所在的页面无法从磁盘加载到内存中,缺页处理程序就会报告一个内存地址无效的错误。

为了判断内存地址是否缺页,可以在安卓和iOS系统中使用一些工具来监控缺页的情况。例如,可以使用Android Studio或Xcode等开发工具中的调试器来查看缺页事件,或者使用命令行工具如top、vmstat和dmesg等来查看系统的缺页信息。

需要注意的是,在安卓和iOS系统中,缺页是一种正常的运行情况,并不一定意味着程序出错或者系统有问题。通常情况下,缺页处理程序能够很好地解决缺页问题,使得程序能够正常运行。

安卓

在 arm64 安卓系统上不访问内存地址的情况下判断内存地址是否缺页的 c/c++ 函数的一种可能的实现方式如下:

隐藏内容,请回复后查看

该函数使用了 mprotect 函数来尝试将内存地址标记为无效。 如果内存地址有效,则标记操作会失败,函数返回 false;如果内存地址无效,则标记操作会成功,函数返回 true

IOS

在 arm64 iOS 系统上不访问内存地址的情况下判断内存地址是否缺页的 c/c++ 函数的一种可能的实现方式如下:

隐藏内容,请回复后查看

该函数使用了 mach_vm_region 函数来获取内存地址的保护属性。 如果内存地址有效,则函数返回 false;如果内存地址无效,则函数返回 true

这种方法的优点在于不会直接访问内存地址,因此不会存在安全风险。 但是,这种方法仅适用于 iOS 系统,对于其他操作系统可能不适用。

评论(52)
leown123leown123
感谢分享哈
14天前回复
milseappmilseapp
666
1个月前回复
用户68507487用户68507487
666
3个月前回复
we3344we3344
诚哥牛啊
5个月前
we3344we3344
感谢分享
5个月前
jjjj
6666666
8个月前
用户33564967用户33564967
感谢分享
9个月前回复
hgyhgy
12345
10个月前
hgyhgy
有点东西
10个月前
用户30218302用户30218302
牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛牛
10个月前回复
用户30218302用户30218302
1mfsdvhbfhbv
10个月前回复
用户63196297用户63196297
诚哥牛啊
11个月前回复
用户63196297用户63196297
[g=xiaojiujie]
11个月前回复
Nilda VendittoNilda Venditto
69696
1年前回复
Nilda VendittoNilda Venditto
66666
1年前回复
用户99007270用户99007270
为什么还看不到代码呢
1年前回复
用户99007270用户99007270
成哥6666
1年前回复
ReUnravelReUnravel
学习一下
1年前
原崎原崎
ios 能用mincore代替吗
1年前
HackXKHackXK
可以啊,很棒的
1年前回复
321321321321
1234555看看
1年前
用户75811684用户75811684
审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核审核
1年前回复
用户75811684用户75811684
[g=wunai]
1年前回复
用户75811684用户75811684
123456
1年前回复
4545445454
777777
1年前
XperiaXperia
emmmmmm
1年前
用户61435847用户61435847
6666666
1年前回复
544556544556
5454564654654645646
1年前
用户93032481用户93032481
6666666666666
1年前回复
未得到哇大未得到哇大
达瓦大大无多哇多哇奥无多
1年前
q725050427q725050427
轻微发热个人委屈
1年前回复
q725050427q725050427
3452342
1年前回复
q725050427q725050427
1234587654
1年前回复
testtest
111
1年前
qweqe4568qweqe4568
有用,学习一下!!!
1年前
12587488961258748896
123588741
1年前
int iint i
12499994
1年前回复
int i;int i;
66666666
1年前
xxxxxx
fsdafdsaf
2年前
xxxxxx
范德萨发生地方
2年前
李马李马
学习了[g=youhengheng]
2年前回复
李马李马
学习一下 谢谢啦
2年前回复
rainrain
666666666666666
2年前
用户95013608用户95013608
学习一下 谢谢啦
2年前回复
666666
学习了 感谢分享~
2年前
用户16038226用户16038226
学习 谢谢大大 感谢感谢
1年前回复
用户16038226用户16038226
学习一下,谢谢大大
1年前回复
用户16038226用户16038226
学习 谢谢大大
1年前回复
emmmemmm
学习了[g=huaixiao]
2年前
emmmemmm
6666
2年前
CaylaCayla
[g=qiang]
2年前回复
CaylaCayla
666666
2年前回复
logo

诚哥博客是一个专注于分享技术、分享资源的平台,由诚哥打造必属精品,团队有着多年开发经验,专注研究各种前沿技术和资源等服务;并提供有保障的维护及售后

关注我们

关注微信公众号

关注微信公众号

Copyright © 2022-2025 诚哥博客 - 诚哥博客