###VC++での条件分岐
Visual Studio 2005 Professionalを未だに使用しています。
久しぶりのプログラミングのせいか、自分でミスが見つからないため、
何がいけないのか教えて頂けないでしょうか?
後述するプログラムで、条件分岐で真となり上の方が実行されると思ったのですが、
実際はelseが実行されてしまいます。(ステップ実行で確認)
###該当のソースコード
C++
1static int test_test(void) 2{ 3 char sSrcData[256]; 4 char *ptr1; 5 char *ptr2; 6 7 ptr1 = sSrcData; 8 ptr2 = sSrcData; 9 10 sSrcData[0] = 0xEF; 11 sSrcData[1] = 0xBB; 12 sSrcData[2] = 0xBF; 13 if( (sSrcData[0] == 0xEF) && (sSrcData[1] == 0xBB) && (sSrcData[2] == 0xBF) ){ 14 ptr1+=3; 15 ptr2+=3; 16 }else{ 17 // ここにきてしまう 18 printf("kitayo\n"); 19 } 20 return(0); 21}
アセンブラの情報を見ると以下になっています。
asm
1static int test_test(void) 2{ 300413E10 push ebp 400413E11 mov ebp,esp 500413E13 sub esp,1E4h 600413E19 push ebx 700413E1A push esi 800413E1B push edi 900413E1C lea edi,[ebp-1E4h] 1000413E22 mov ecx,79h 1100413E27 mov eax,0CCCCCCCCh 1200413E2C rep stos dword ptr es:[edi] 1300413E2E mov eax,dword ptr [___security_cookie (417000h)] 1400413E33 xor eax,ebp 1500413E35 mov dword ptr [ebp-4],eax 16 char sSrcData[256]; 17 char *ptr1; 18 char *ptr2; 19 20 ptr1 = sSrcData; 2100413E38 lea eax,[ebp-108h] 2200413E3E mov dword ptr [ebp-114h],eax 23 ptr2 = sSrcData; 2400413E44 lea eax,[ebp-108h] 2500413E4A mov dword ptr [ebp-120h],eax 26 27 sSrcData[0] = 0xEF; 2800413E50 mov byte ptr [ebp-108h],0EFh 29 sSrcData[1] = 0xBB; 3000413E57 mov byte ptr [ebp-107h],0BBh 31 sSrcData[2] = 0xBF; 3200413E5E mov byte ptr [ebp-106h],0BFh 33 if( (sSrcData[0] == 0xEF) && (sSrcData[1] == 0xBB) && (sSrcData[2] == 0xBF) ){ 3400413E65 movsx eax,byte ptr [ebp-108h] 3500413E6C cmp eax,0EFh 3600413E71 jne test_test+9Fh (413EAFh) 3700413E73 movsx eax,byte ptr [ebp-107h] 3800413E7A cmp eax,0BBh 3900413E7F jne test_test+9Fh (413EAFh) 4000413E81 movsx eax,byte ptr [ebp-106h] 4100413E88 cmp eax,0BFh 4200413E8D jne test_test+9Fh (413EAFh) 43 ptr1+=3; 4400413E8F mov eax,dword ptr [ebp-114h] 4500413E95 add eax,3 4600413E98 mov dword ptr [ebp-114h],eax 47 ptr2+=3; 4800413E9E mov eax,dword ptr [ebp-120h] 4900413EA4 add eax,3 5000413EA7 mov dword ptr [ebp-120h],eax 51 }else{ 5200413EAD jmp test_test+0B6h (413EC6h) 53 // ここにきてしまう 54 printf("kitayo\n"); 5500413EAF mov esi,esp 5600413EB1 push offset string "kitayo\n" (4157D4h) 5700413EB6 call dword ptr [__imp__printf (4182F4h)] 5800413EBC add esp,4 5900413EBF cmp esi,esp 6000413EC1 call @ILT+350(__RTC_CheckEsp) (411163h) 61 } 62 return(0); 6300413EC6 xor eax,eax 64}
何が間違っているか教えて頂けないでしょうか?
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/22 13:48