读取程序自身的内存作为数据

Reading a program's own memory as data

我在看Mario glitch

马里奥 gameboy 卡带读取自己的内存作为关卡数据。

如何才能访问我是 运行 的程序的当前内存? (尽管我认为 C 或 Assembly 是任何语言的起点)

在汇编中你可以直接读取ESP (stack pointer) and EIP (instruction pointer)寄存器。它们将分别具有栈顶地址和当前指令。从那里你可以直接读取堆栈和指令的内存。

在该视频中,他们超出了关卡数据,游戏开始将堆栈数据解释为关卡数据。然后,他通过打破包含进入下一层的内存的砖块来写入堆栈中的偏移量。

因为它总是具有相同数据的相同砖块,这意味着内存布局非常确定,这对于处理器上没有其他 运行 的旧墨盒系统来说并不奇怪。如果您具有控制台访问权限并且知道偏移量,则可以直接写入数据。