如果我拿一个用 C++ 编写的旧 Windows 95 .EXE,我想将 8 位整数转换为 16 位整数,会不会很困难?
If I were to take an old Windows 95 .EXE written in C++, and I wanted to convert 8bit Integers to 16bit Integers, would it be difficult?
如果我有一个旧的 PC 游戏,它的某些变量不能超过 255 而不会崩溃,是否可以通过修改 Windows 95 可执行文件将所有 8 位整数转换为 16 位整数?
我说的游戏是 1997 年的 Total Annihilation。虽然游戏本身远远领先于它的时代,并且有能力将其改装成史诗般的体验,(见鬼,这款游戏太超前了time, the data files use JSON-like syntax...该游戏还支持 4K,看起来仍然很棒。)不幸的是,游戏中的武器总数是有限制的。所有武器都有ID,武器ID最大为255,如下所示:
[NUCLEAR_MISSILE]
{
ID=122;
name=Nuclear Missile;
rendertype=1;
lineofsight=1;
vlaunch=1;
model=ballmiss;
range=32000;
reloadtime=180;
noautorange=1;
weapontimer=5;
flighttime=400;
weaponvelocity=350;
weaponacceleration=50;
turnrate=32768;
areaofeffect=512;
edgeeffectiveness=0.25;
energypershot=180000;
metalpershot=2000;
stockpile=1;
targetable=1;
commandfire=1;
cruise=1;
soundstart=misicbm1;
soundhit=xplomed4;
firestarter=100;
smokedelay=.1;
selfprop=1;
smoketrail=1;
propeller=1;
twophase=1;
guidance=1;
tolerance=4000;
shakemagnitude=24;
shakeduration=1.5;
explosiongaf=commboom;
explosionart=commboom;
waterexplosiongaf=fx;
waterexplosionart=h2oboom2;
lavaexplosiongaf=fx;
lavaexplosionart=lavasplashlg;
startsmoke=1;
[DAMAGE]
{
default=5500;
ARMCOM=2900;
CORCOM=2900;
}
}
这样做值得吗?我不是很熟悉汇编语言,但我听说过去使用 C++ 时,有时在某些情况下您必须编写自己的汇编语言。
我只想通过编辑 .EXE 将所有 8 位 Int 提升到 16 位,这有多难实现?
All I want to do is just bump up all 8bit Ints to 16bit by editing the .EXE, how difficult would this be to pull off?
如果不访问源代码,基本上是不可能的。用 16 位整数替换 8 位整数会改变包含它的数据结构的大小和布局。 "touched" 这些对象或包含它们的任何对象的任何代码都需要更新。识别该代码将是一个广泛的项目——很可能,它需要将大部分游戏手动反编译为 C 源代码。
如果我有一个旧的 PC 游戏,它的某些变量不能超过 255 而不会崩溃,是否可以通过修改 Windows 95 可执行文件将所有 8 位整数转换为 16 位整数?
我说的游戏是 1997 年的 Total Annihilation。虽然游戏本身远远领先于它的时代,并且有能力将其改装成史诗般的体验,(见鬼,这款游戏太超前了time, the data files use JSON-like syntax...该游戏还支持 4K,看起来仍然很棒。)不幸的是,游戏中的武器总数是有限制的。所有武器都有ID,武器ID最大为255,如下所示:
[NUCLEAR_MISSILE]
{
ID=122;
name=Nuclear Missile;
rendertype=1;
lineofsight=1;
vlaunch=1;
model=ballmiss;
range=32000;
reloadtime=180;
noautorange=1;
weapontimer=5;
flighttime=400;
weaponvelocity=350;
weaponacceleration=50;
turnrate=32768;
areaofeffect=512;
edgeeffectiveness=0.25;
energypershot=180000;
metalpershot=2000;
stockpile=1;
targetable=1;
commandfire=1;
cruise=1;
soundstart=misicbm1;
soundhit=xplomed4;
firestarter=100;
smokedelay=.1;
selfprop=1;
smoketrail=1;
propeller=1;
twophase=1;
guidance=1;
tolerance=4000;
shakemagnitude=24;
shakeduration=1.5;
explosiongaf=commboom;
explosionart=commboom;
waterexplosiongaf=fx;
waterexplosionart=h2oboom2;
lavaexplosiongaf=fx;
lavaexplosionart=lavasplashlg;
startsmoke=1;
[DAMAGE]
{
default=5500;
ARMCOM=2900;
CORCOM=2900;
}
}
这样做值得吗?我不是很熟悉汇编语言,但我听说过去使用 C++ 时,有时在某些情况下您必须编写自己的汇编语言。
我只想通过编辑 .EXE 将所有 8 位 Int 提升到 16 位,这有多难实现?
All I want to do is just bump up all 8bit Ints to 16bit by editing the .EXE, how difficult would this be to pull off?
如果不访问源代码,基本上是不可能的。用 16 位整数替换 8 位整数会改变包含它的数据结构的大小和布局。 "touched" 这些对象或包含它们的任何对象的任何代码都需要更新。识别该代码将是一个广泛的项目——很可能,它需要将大部分游戏手动反编译为 C 源代码。