读取程序自身的内存作为数据
Reading a program's own memory as data
我在看Mario glitch
马里奥 gameboy 卡带读取自己的内存作为关卡数据。
如何才能访问我是 运行 的程序的当前内存? (尽管我认为 C 或 Assembly 是任何语言的起点)
在汇编中你可以直接读取ESP (stack pointer) and EIP (instruction pointer)寄存器。它们将分别具有栈顶地址和当前指令。从那里你可以直接读取堆栈和指令的内存。
在该视频中,他们超出了关卡数据,游戏开始将堆栈数据解释为关卡数据。然后,他通过打破包含进入下一层的内存的砖块来写入堆栈中的偏移量。
因为它总是具有相同数据的相同砖块,这意味着内存布局非常确定,这对于处理器上没有其他 运行 的旧墨盒系统来说并不奇怪。如果您具有控制台访问权限并且知道偏移量,则可以直接写入数据。
我在看Mario glitch
马里奥 gameboy 卡带读取自己的内存作为关卡数据。
如何才能访问我是 运行 的程序的当前内存? (尽管我认为 C 或 Assembly 是任何语言的起点)
在汇编中你可以直接读取ESP (stack pointer) and EIP (instruction pointer)寄存器。它们将分别具有栈顶地址和当前指令。从那里你可以直接读取堆栈和指令的内存。
在该视频中,他们超出了关卡数据,游戏开始将堆栈数据解释为关卡数据。然后,他通过打破包含进入下一层的内存的砖块来写入堆栈中的偏移量。
因为它总是具有相同数据的相同砖块,这意味着内存布局非常确定,这对于处理器上没有其他 运行 的旧墨盒系统来说并不奇怪。如果您具有控制台访问权限并且知道偏移量,则可以直接写入数据。