for的机制
5: int i=1,j;
00401268 mov dword ptr [ebp-4],1
6: for(i=3;i<=10;i+=2)
0040126F mov dword ptr [ebp-4],3 (执行for中第一句)
00401276 jmp main+31h (00401281) (跳到判断语句)
00401278 mov eax,dword ptr [ebp-4]//
0040127B add eax,2 // (执行for中第三句的自加)
0040127E mov dword ptr [ebp-4],eax//
00401281 cmp dword ptr [ebp-4],0Ah// 判断语句
00401285 jg main+3Fh (0040128f) // ??????
7: {
8: j=i;
00401287 mov ecx,dword ptr [ebp-4]
0040128A mov dword ptr [ebp-8],ecx
9: }
0040128D jmp main+28h (00401278) // 跳到执行for中的第二句
for中三句话的先后顺序: 第一句,第三句,第二句
执行过程: 第一句,第二句,程序块 , 第三句,第二句,程序块……
while机制:
5: int a=5;
00401268 mov dword ptr [ebp-4],5
6: while(a>1)
0040126F cmp dword ptr [ebp-4],1
00401273 jle main+30h (00401280) //???????
7: {
8: a--;
00401275 mov eax,dword ptr [ebp-4]
00401278 sub eax,1
0040127B mov dword ptr [ebp-4],eax
9: }
0040127E jmp main+1Fh (0040126f)
do-while机制:
5: int a=10;
00401268 mov dword ptr [ebp-4],0Ah
6: do
7: {
8: a--;
0040126F mov eax,dword ptr [ebp-4]
00401272 sub eax,1
00401275 mov dword ptr [ebp-4],eax
9: }while(a>4);
00401278 cmp dword ptr [ebp-4],4
0040127C jg main+1Fh (0040126f) // 从这里可以猜到jg有跳转的功能,那它与jmp有什么不同呢??? 跳到指定的指令地址上去?
反汇编知识整理--for,while,do-while的循环机制 -- 老码识途任重而道远呀
最新推荐文章于 2023-06-09 09:19:56 发布