今天我用c#自己编写了一个dll文件,并执行。同时用CE在一个调用了dll的exe执行时成功了修改了内存数据(必然用了小小的技巧跟踪了一下找到了变量的内存地址,应该是逻辑地址)。但是直接用CE查找dll文件时,却跟踪不到那个变量。我是给那个变量一个初始值,然后查找初始值,但是却找不到。而在跟踪exe时,我在那个变量每次自增1时(当然是我在dll里自己设定的),scan一次,scan了几次之后就找到了。这有点郁闷。
后来我继续网上查了资料。发现修改war3内存数据有两种方式,一是直接修改dll,而是在exe运行时修改内存数据。而这两种方式中的地址有这种映射关系,就是加载dll会给dll模块一个模块基地址gameaddr,也称加载地址。我想是这样的:加载地址+数据在dll的相对地址=数据的内存地址(这应该可以验证的)。但是这还是解释不了我上面的那个问题。难道是因为c#编的dll跟原来实质的dll有所区别而造成的?