V2EX 为什么游戏修改器能修改其它程序的内存? 11月 5, 2020 aiqier 操作系统不是使用虚拟地址空间管理每个进程的内存,每个进程的内存空间是独立的,其它进程访问不到的么,那为啥可以写游戏修改器,修改游戏程序的内存变量。 Post Views: 1 赞微海报分享 相关文章 V2EX [急聘] 腾讯云大数据,期待您的加入!有投必回 25 12月 28, 20201月 19, 2021 amd6400 V2EX 有对虚拟环境熟悉的大佬吗 12月 28, 2020 IVeverKB
https://lmgtfy.app/?q=%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B8%B8%E6%88%8F%E4%BF%AE%E6%94%B9%E5%99%A8%E8%83%BD%E4%BF%AE%E6%94%B9%E5%85%B6%E5%AE%83%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%86%85%E5%AD%98%EF%BC%9F 回复
操作系统提供支持啊,不然调试器怎么去看进程的变量。Linux 下去查preadpwrite Windows 下查OpenProcessReadProcessMemoryWriteProcessMemory 回复
分 2 种,一种 External,另一种 Internal 。External 的,使用 WindowsAPI OpenProcess ReadProcessMemory WriteProcessMemory 来操作内存。Internal 的,通过 dll 注入,直接附着到目标进程,就像在自己家里面一样,例如可以直接`player->health = 5000;` 回复
https://lmgtfy.app/?q=%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B8%B8%E6%88%8F%E4%BF%AE%E6%94%B9%E5%99%A8%E8%83%BD%E4%BF%AE%E6%94%B9%E5%85%B6%E5%AE%83%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%86%85%E5%AD%98%EF%BC%9F
操作系统提供了 API 呗…
不是修改程序内存变量,是直接改写内存的内容(就像改硬盘内容)。
找个制作游戏修改器教程看一下,或用一下这个 Cheat Engine 软件,就明了。
操作系统提供支持啊,不然调试器怎么去看进程的变量。
Linux 下去查
pread
pwrite
Windows 下查
OpenProcess
ReadProcessMemory
WriteProcessMemory
肯定是系统提供了支持呀,想想 VS 里的堆栈内存追踪,你又没往你程序里写这些,总不至于编译器自动给你加进去吧
操作系统除了有隔离,也能让其他进程访问进程内存,例如调试器就是独立的进程
有权限可以直接读写,Read/WriteProcessMemory 。
或者 DLL 直接挂到别的进程。
@nightwitch Linux 下是 ptrace 系统调用,不是 pread
分 2 种,一种 External,另一种 Internal 。
External 的,使用 WindowsAPI OpenProcess ReadProcessMemory WriteProcessMemory 来操作内存。
Internal 的,通过 dll 注入,直接附着到目标进程,就像在自己家里面一样,例如可以直接`player->health = 5000;`
@nightwitch pread pwrite 不是你想象的那个 p,直接读写应该是 /proc/xxx/mem,间接的可以 ptrace 进去读写
你可以理解为 gdb 一样的东西
除了直接读写指定进程内存,也可以通过替换动态链接库的方式 hook 进程,不过权限要求比较高