编程语言里面“强制转换”在内存上的机理是什么样?如何写一个单机游戏修改器
所谓强制转换,其实也分不同的类型。①个强制转换语句,在不同的场合下,有不同的含义。大体上来看,在 C 语言里面,强制类型转换有两种含义:
① · 将①个数据,复制为另外①个数据类型,并且使用新类型的数据,此时可以认为新类型的数据,在内存结构方面与原有数据没有任何关系,这是实实在在的发生了转换,而且执行这个转换相关的代码是编译器生成的。例如:char c = \'c\';
int i = (int) c;在上面的例子中,字符 c 被转化成了 int,两者是完全不同的数据,其内存占用的长度也完全不同。
② · 将①个数据,当作另外①个数据类型使用,让编译器认为这就是另外①个数据类型,此时数据没有发生任何转换,在计算机的角度没有任何事情发生,也不为这个转换生成任何代码,只是编译器认为这个语句合法了。例如:long l = ⓪x①⓪⓪⓪⓪⓪⓪⓪L;
volatile void *p = (void *) l;在这句话中,变量 l 被『直接视为』指针 p,从内存数据的角度没有发生任何转换,这个转换只是让编译器认为这个赋值合法而已。
在 C++ 里面,通常第②种类型被称为 reinterpret_cast,而第①种类型就直接使用显式类型转换实现。
在 Java 里面,通常也会根据上下文,出现 ① 和 ② 的两种不同情况。
谢邀
这个就要涉及到软件逆向工程了
用OD、IDA通过汇编推出源程序
逆向分析出游戏程序的关键函数和关键算法,修改之后就是①个破解版的游戏。
单机游戏修改器的话,首先要明白,任何程序的运行都是要过内存的。修改器就是修改了内存中的①些数据。
这需要很多的知识储备才可以做到,不光要懂汇编,会逆向,计算机组成原理、操作系统你也要懂(主要还是windows系统),它是如何管理内存的?什么是内核?什么是内核编程?什么是API接口?游戏加壳了该怎么脱?什么是PE结构?总之对于底层知识了解越多越好。
不光要懂底层,还要有①定的编程能力去实现它。数据结构和算法、 C/C++、windows程序设计,这些都不能不会。
网游外G不光要逆向出游戏的接口,你还要懂,TCP/IP、通信封包分析这又是①个更深的领域了。
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息