IDA的for循环
2024-01-10
3
0
自己写了一个测试小程序,拖到了IDA中反汇编。
其中一段反汇编代码如下:
.text:0041194D mov [ebp+i], 0
.text:00411954 jmp short loc_41195F
.text:00411956 ; ---------------------------------------------------------------------------
.text:00411956
.text:00411956 loc_411956: ; CODE XREF: _main_0+A5↓j
.text:00411956 mov eax, [ebp+i]
.text:00411959 add eax, 1
.text:0041195C mov [ebp+i], eax
.text:0041195F
.text:0041195F loc_41195F: ; CODE XREF: _main_0+84↑j
.text:0041195F cmp [ebp+i], 0Ah
.text:00411963 jge short loc_411977
.text:00411965 mov eax, [ebp+i]
.text:00411968 add eax, 1
.text:0041196B mov ecx, [ebp+i]
.text:0041196E mov dword_41A138[ecx*4], eax
.text:00411975 jmp short loc_411956
.text:00411977 ; ---------------------------------------------------------------------------
.text:00411977
.text:00411977 loc_411977: ; CODE XREF: _main_0+93↑j
.text:00411977 xor eax, eax
这其实是一段典型的循环汇编代码。但为了方便快速的还原成C语言代码,我们需要对汇编代码进行分隔分析,掌握诀窍。以后就可以快速的实现FOR循环代码的还原。
而真实的C代码如下:
for (int i = 0; i < 10; i++)
{
a[i] = i + 1;
}
其实这从汇编的角度来讲,i是执行i++之后,再和条件判断。
而FOR循环分为4部分,从上到下依次为:
1.初始化部分
2.变量变化部分i++
3.条件判断部分
4.循环内部代码