【发布时间】:2019-03-23 20:39:57
【问题描述】:
假设linux中有两个进程P1、P2(是病毒)。 P2 可以访问 P1 的本地变量(比如 x)吗?
在网上搜索,我发现由于进程中使用的地址是逻辑地址,所以P2无法访问P1的局部变量'x'。
但我想知道 P2 是否生成随机地址,其中一个解析为与“x”相同的物理地址,那么它不能访问它吗?
P2 真的可以访问 P1 的“x”吗?
如果是,如何? (如果可以通过任何技巧访问,请告诉我)
如果不能,为什么?
P1 代码:
int main() {
int x = 20;
return 0;
}
p2 代码:
int main() {
/*
generate random addresses and access them.
one of them might resolve to physical address of 'x' in P1
*/
return 0;
}
【问题讨论】:
-
进程通常具有独立的内存——即使没有 ASLR。但是,有一些方法可以使用“共享内存”(提示:关键字)。
-
为什么P2会生成随机地址?除非你问的是 P1 是否容易受到这种方式的攻击?
-
@Chipster “除非你问的是 P1 是否容易受到这种方式的攻击?” ==> 是的,我的意思是这个。
-
@user2864740 "但是,有一些方法可以使用“共享内存”" ==> 这是共享内存的合法方式。有什么方法可以在不使用任何合法的共享内存方式的情况下从 P2 访问“x”?
-
喀布尔,细节取决于环境——以一些“游戏作弊”程序为例(“非恶意”)。在过去,这些主要基于内存修改。通常需要特殊的高度和支持/可行性各不相同。还有一些方法可以“挂钩”到正在运行的进程中,这样内存访问实际上就不会跨越进程边界。
标签: c++ memory-management process