Revisa el código. Saltar a ése printf en particular no rompe nada pues no PUSHea nada al stack, lo usa directamente.
Ahora, si usas un CALL como pones, ahí sí romperás el stack y tendrás una excepción.
Saludos!
Si cierto, mala mía
ahí revisé bien el código y efectivamentelo el caller se va a cualquier lado.
Poniendo el call igual muestra el mensaje pero cuando termina la rutina
passwordOK explota, además que el call es más largo que el jmp short :S (5bytes vs 2bytes).
Lo compilé en mingw (sin optimizaciones) y quedó identico...
Dejo las rutinas completas:
00401340 <testcode.sub_401340> | 55 | push ebp |
00401341 | 89 E5 | mov ebp,esp |
00401343 | 83 E4 F0 | and esp,FFFFFFF0 |
00401346 | 83 EC 20 | sub esp,20 |
00401349 | E8 72 06 00 00 | call testcode.4019C0 |
0040134E | C7 44 24 1C 00 00 00 00 | mov dword ptr ss:[esp+1C],0 |
00401356 | C7 44 24 18 00 00 00 00 | mov dword ptr ss:[esp+18],0 |
0040135E | EB 4B | jmp testcode.4013AB |
00401360 | 83 44 24 18 01 | add dword ptr ss:[esp+18],1 |
00401365 | C7 04 24 24 30 40 00 | mov dword ptr ss:[esp],testcode.403024 | 403024:"Password: "
0040136C | E8 BF 08 00 00 | call <testcode.printf> |
00401371 | 8D 44 24 14 | lea eax,dword ptr ss:[esp+14] |
00401375 | 89 04 24 | mov dword ptr ss:[esp],eax |
00401378 | E8 BB 08 00 00 | call <testcode.gets> |
0040137D | C7 44 24 04 2F 30 40 00 | mov dword ptr ss:[esp+4],testcode.40302 | 40302F:"PARIS"
00401385 | 8D 44 24 14 | lea eax,dword ptr ss:[esp+14] |
00401389 | 89 04 24 | mov dword ptr ss:[esp],eax |
0040138C | E8 AF 08 00 00 | call <testcode.strcmp> |
00401391 | 85 C0 | test eax,eax |
00401393 | 75 0A | jne testcode.40139F |
00401395 | C7 44 24 1C 01 00 00 00 | mov dword ptr ss:[esp+1C],1 |
0040139D | EB 0C | jmp testcode.4013AB |
0040139F | C7 04 24 35 30 40 00 | mov dword ptr ss:[esp],testcode.403035 | 403035:"Password NOT OK"
004013A6 | E8 9D 08 00 00 | call <testcode.puts> |
004013AB | 83 7C 24 1C 00 | cmp dword ptr ss:[esp+1C],0 |
004013B0 | 75 07 | jne testcode.4013B9 |
004013B2 | 83 7C 24 18 02 | cmp dword ptr ss:[esp+18],2 |
004013B7 | 7E A7 | jle testcode.401360 |
004013B9 | 83 7C 24 1C 01 | cmp dword ptr ss:[esp+1C],1 |
004013BE | 75 07 | jne testcode.4013C7 |
004013C0 | E8 21 00 00 00 | call <testcode.sub_4013E6> |
004013C5 | EB 18 | jmp testcode.4013DF |
004013C7 | C7 04 24 45 30 40 00 | mov dword ptr ss:[esp],testcode.403045 | 403045:"ERROR: 3 passwords NOT OK"
004013CE | E8 75 08 00 00 | call <testcode.puts> |
004013D3 | C7 04 24 5F 30 40 00 | mov dword ptr ss:[esp],testcode.40305F | 40305F:"PAUSE"
004013DA | E8 71 08 00 00 | call <testcode.system> |
004013DF | B8 00 00 00 00 | mov eax,0 |
004013E4 | C9 | leave |
004013E5 | C3 | ret |
004013E6 <testcode.sub_4013E6> | 55 | push ebp |
004013E7 | 89 E5 | mov ebp,esp |
004013E9 | 83 EC 18 | sub esp,18 |
004013EC | C7 04 24 65 30 40 00 | mov dword ptr ss:[esp],testcode.403065 | 403065:"Password OK\n "
004013F3 | E8 38 08 00 00 | call <testcode.printf> |
004013F8 | C7 04 24 5F 30 40 00 | mov dword ptr ss:[esp],testcode.40305F | 40305F:"PAUSE"
004013FF | E8 4C 08 00 00 | call <testcode.system> |
00401404 | C9 | leave |
00401405 | C3 | ret |
B#