woshisf 发表于 2022-8-4 12:48

用IDA修改一个文件中的几个全局变量

本帖最后由 woshisf 于 2022-8-4 12:51 编辑

首先我是一个白的不能再白的小白,我想让这个常量变成dw类型,有办法在不动结构的状况下转换吗?




wihn 发表于 2022-8-4 14:05

存储是连续的,后一个数据紧挨着你要改的数据,改了大小,后面的数据肯定受影响要往后移;如果强制不往后移,后面的数据也会缺失前面的一部分。

woshisf 发表于 2022-8-4 14:17

wihn 发表于 2022-8-4 14:05
存储是连续的,后一个数据紧挨着你要改的数据,改了大小,后面的数据肯定受影响要往后移;如果强制不往后移 ...

就是说全局变量这部分没法改,如果我整体增加几个byte不就有空间么吗?

wihn 发表于 2022-8-4 14:28

woshisf 发表于 2022-8-4 14:17
就是说全局变量这部分没法改,如果我整体增加几个byte不就有空间么吗?

整体增加了几个bytes,程序有一些代码要访问这全局变量,使用的还是以前的地址,就会出现混乱。而且在这个位置增加几个bytes,那么就是说从这个位置开始的所有地址都要往后移几个bytes,而写在代码里的地址还是原来那样。比如原来数据是12345,现在加了一些,变成122345,那么原来会取到4的代码,现在取到了3,对程序会有影响。

狄人3 发表于 2022-8-4 14:30

这个db dw只是ida识别出来的类型,没有必须要修改啊

HUAJIEN 发表于 2022-8-4 14:36

你要是小白那我连小白现在都混不上{:301_972:}

woshisf 发表于 2022-8-4 15:28

狄人3 发表于 2022-8-4 14:30
这个db dw只是ida识别出来的类型,没有必须要修改啊

比如说数组中的一个word值如果被这个db(char)调用了,那么不就丢失了高位部分.所以我想从源头解决.
如果实在没办法,我还是得在关键部位mov的地方强转?

狄人3 发表于 2022-8-4 17:40

woshisf 发表于 2022-8-4 15:28
比如说数组中的一个word值如果被这个db(char)调用了,那么不就丢失了高位部分.所以我想从源头解决.
如果 ...

我好像不是很懂数组中的word值被数据调用是啥意思。。。这个不是数据吗,怎么会调用别人

GinCHN 发表于 2022-8-4 17:56

学习了🙈

woshisf 发表于 2022-8-9 09:42

狄人3 发表于 2022-8-4 17:40
我好像不是很懂数组中的word值被数据调用是啥意思。。。这个不是数据吗,怎么会调用别人

一般数组构造完成都是空的,只有一个结构,所以如果变量设定的值是char,那么调用talbe导入的时候就会进行强转成char,这时候如果table中这个值是WORD就会丢失1个byte,所以想改全局变量的参数,让这个数组该变量默认变成word就可以了
页: [1] 2
查看完整版本: 用IDA修改一个文件中的几个全局变量