场景:F5 之后的伪代码,变量直接被使用,没有被赋值,但是根据上下文,一定具有含义;
例如:
v3 = &v104 + 0x14 * (signed __int16)v29 - 0x442;
// 这里的104 是什么??前面只有定义,没有被赋值,而且不属于数组中的一部分
查看对应Arm指令:
.text:9FAADCD8 MOVS R6, #0x50 ; 这里的0x50 是什么??
.text:9FAADCDA STR R0, [SP,#0x1218+var_1200]
.text:9FAADCDC LSLS R3, R4, #0x10
.text:9FAADCDE ASRS R3, R3, #0x10
.text:9FAADCE0 MULS R6, R3
.text:9FAADCE2 MOVS R0, #0x1200 ;这里 是&V104 查看 int v104; // [sp+1200h] [bp-18h]@9
.text:9FAADCE6 LDR R1, =0xFFFFEEF8
.text:9FAADCE8 ADD R0, SP
.text:9FAADCEA ADDS R6, R0, R6
.text:9FAADCEC MOVS R4, #1
.text:9FAADCEE ADDS R6, R6, R1
查看对应的汇编,其实应该这么写:
v3 = (signed int *)v54 + 0x14 * (signed __int16)v29;// OK 通过调试发现