我使用 IDA 来分析 EXE,并发现一些令人困惑的东西。.data
部分应包含初始化的数据,因此每个位置都应具有如下所示的内容:
var_A db 0h
var_B dw 12h
但是我得到很多带有问号的条目。
例如.data:00000001400F1680 qword_1400F1680 dq ? ; DATA XREF: sub_14004F8B0+8Er
.data:00000001400F1680 ; sub_1400539D0+12Aw ...
.data:00000001400F1688 qword_1400F1688 dq ? ; DATA XREF: sub_1400539D0+F5w
.data:00000001400F1688 ; sub_1400539D0+FCr
.data:00000001400F1690 qword_1400F1690 dq ? ; DATA XREF: sub_1400539D0+C0w
.data:00000001400F1690 ; sub_1400539D0+C7r
据我所知,x86汇编中的?
意味着未初始化的数据。但这是在.data
部分!那么它们真的没有初始化,还是 IDA 中db/dw/dd/dq
中的问号有不同的含义?
IDA Pro 将未初始化的值显示为"?"。当 .data 部分的虚拟大小大于 .data 部分的原始大小时,"?"标记将显示 .data 部分。大于 virtual_address('.data'(+raw_size('.data'( 的地址会显示"?"标记。
db/dw/dd/dq 在 IDA Pro 中有不同的含义。IDA Pro 分析程序集代码并设置位置类型。db/dw/dd/dq 表示引用地址的指令分别使用 1/2/4/8 字节。