背景

如果有学过汇编,那么访问内存将不是一件难事,因为汇编要求你熟悉每一个内存模块,每一个内存地址。我记得当初上汇编的第一节课,老师就说汇编如果不懂的,直接debug那个地址,在命令控制台里找出那个地址对应的数值。今天我们讲的访问固定的内存位置也是使然,想成为顶尖的程序员,就必须对每一句代码里的每一个内存了然于胸。

面试题目

在某工程中,要求设置一绝对地址为0x67a9的整型变量的值为0xaa66。编译器是一个纯粹的ANSI编译器。

相信大部份人都有看过这道题目,建议的代码如下

访问固定的内存位置(Accessing fixed memory locations)_c++

我不知道有没有人亲自去敲敲这代码,反正我敲了,代码是有问题的(可能我的不是ANSI编译器,又或者这不是一块有效的地址,当然修改内存也是一个比较危险的事,作为一名黑客,或者逆向人员就常干这事

访问固定的内存位置(Accessing fixed memory locations)_c++_02

很明显,这块内存是不允许被写入的,也就是这块地址是不被更改的。

访问固定的内存位置(Accessing fixed memory locations)_内存地址_03

网上还提到一种晦涩的方法

访问固定的内存位置(Accessing fixed memory locations)_c++_04

总结

很多游戏外挂都是采用篡改内存地址来达到入侵的目的,所以说如果你能自由的读写每一块内存,就掌握了财富的密码。当然,像windows这种,其实提供了很多系统虚拟地址。