另外说一下让我遇到的一些难点吧,相信也是从高级语言转到汇编语言时常遇到的问题。
1.全局变量。在反汇编时,很难分清一个变量究竟是占用了哪些内存。比如一个char * str的首地址是0x003A0100,那么我很难分辨mov [0x003A0105],eax这条语句,是str[5]呢,还是另外一个变量。这样的变量一多,在逆向时,就很难分清楚谁是谁了。
2.无参数call。一般在反编译时,一些带参数,带返回值的call还比较好分析,但是一些函数在call之前没有push参数,返回时也没处理eax。例如下面这种:
0040363C |. 85F6 test esi, esi
0040363E |. 74 09 je short 00403649
00403640 |. 89C2 mov edx, eax
00403642 |. 89F0 mov eax, esi
00403644 |. E8 5BF0FFFF call 004026A4
00403649 |> 89D8 mov eax, ebx
0040364B |. E8 F4FEFFFF call 00403544
一般跟进这些call的里面时,还有好多个无参数无返回值的call,分析得头都大了
3.大量跳转。这种一般是出现在查表法中。一般可以用goto模拟,但是在写出程序后,我自己也看不出到底是啥意思了……如果简化跳转的话,又十分复杂……
暂时想起那么多,发现其他的再补充好了。