场景: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 通过调试发现其实要这样写
另外一个情况也是一样的;
v104_seriesLength = (*v103_InputStringExID)(0xFFFD002E, 0xFFFD000B, 0, v202);//
// 提示信息 并 输入电池序列号
// 返回输入数据的长度;
n_in

本文探讨了在使用IDA进行逆向工程时遇到的F5反汇编识别错误,通过实例分析了如何理解未赋值变量的实际含义,并提供了修正错误的思路。在遇到类似问题时,可以通过动态调试和内存值分析来推测代码行为。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



