Вот такая функция: Код (Text): void __declspec(naked)foo (){ __asm { push ebx sub esp,1024 mov ebx,[esp+1032] xor eax,eax dec ebx _loop: inc ebx cmp byte ptr[ebx],'0' jne _next inc eax _next: cmp byte ptr[ebx],0 jne _loop xor ebx,ebx _loop1: mov ecx,[1032+eax*4] mov edx,[esp+ecx] push edx inc ebx dec eax jns _loop1 push [esp] call foo_1 inc ebx _loop2: pop eax dec ebx jnz _loop2 push [esp] call foo_2 pop ebx add esp,1024 } } Вот код, вернее огрызки кода, которые вижу в Оле: Код (Text): 00403590 $ 53 PUSH EBX 00403591 . 81EC 00040000 SUB ESP,400 00403597 . 8B9C24 0804000>MOV EBX,DWORD PTR SS:[ESP+408] 0040359E . 33C0 XOR EAX,EAX 004035A0 . 4B DEC EBX 004035A1 > 43 INC EBX 004035A2 . 803B 25 CMP BYTE PTR DS:[EBX],30 004035A5 . 75 01 JNZ SHORT prog.004035A8 004035A7 . 40 INC EAX 004035A8 > 803B 00 CMP BYTE PTR DS:[EBX],0 004035AB .^75 F4 JNZ SHORT prog.004035A1 004035AD . 33DB XOR EBX,EBX 004035AF 8B DB 8B 004035B0 0C DB 0C 004035B1 85 DB 85 004035B2 08 DB 08 004035B3 04 DB 04 004035B4 00 DB 00 004035B5 00 DB 00 004035B6 8B DB 8B 004035B7 14 DB 14 004035B8 0C DB 0C 004035B9 52 DB 52 ; CHAR 'R' 004035BA 43 DB 43 ; CHAR 'C' 004035BB 48 DB 48 ; CHAR 'H' 004035BC 79 DB 79 ; CHAR 'y' 004035BD F1 DB F1 004035BE FF DB FF 004035BF 34 DB 34 ; CHAR '4' 004035C0 24 DB 24 ; CHAR '$' 004035C1 E8 DB E8 004035C2 . 4F 5A 00 ASCII "OZ",0 004035C5 00 DB 00 004035C6 43 DB 43 ; CHAR 'C' 004035C7 58 DB 58 ; CHAR 'X' 004035C8 4B DB 4B ; CHAR 'K' 004035C9 75 DB 75 ; CHAR 'u' 004035CA FC DB FC 004035CB FF DB FF 004035CC 34 DB 34 ; CHAR '4' 004035CD 24 DB 24 ; CHAR '$' 004035CE E8 DB E8 004035CF F9 DB F9 004035D0 DA DB DA 004035D1 FF DB FF 004035D2 FF DB FF 004035D3 5B DB 5B ; CHAR '[' далее такой же мусор. Куда делась часть функции после xor ebx,ebx ?
Мда, посыпаю голову пеплом Что-то засиделся я в сях, пора назад в асм возвращаться. Элементарное забывается... Должно быть lea ecx,[1032+eax*4], а не mov ecx,[1032+eax*4] Хотя тут возникает другой вопрос: почему такую инструкцию пропускает cl? Если это некорректная инструкция, то должно было быть сообщение об ошибке. Если сообщения об ошибке нет - значит валидная инструкция, и должен быть какой-то опкод, а не куча байт.
Asterix Иды у меня нет. А Оля действительно что-то напутала. Сейчас вспомнил про PeExplorer, там тоже дизассемблер есть, и в нем всё нормально отображается. В смысле показывает инструкцию mov ecx,[1032+eax*4], а не набор DB, как в Оле. Значит будем знать, что оля спотыкается.
дизасм odbg можно поправить Plugin OllyDbg : FullDisasm Here is a small plugin for OllyDbg 1.10 which allows you to replace the old disassemble routine used in OllyDbg by a more recent one (beaengine). With this plugin, you can now debug MMX, FPU, SSE, SSE2, SSE3 and SSSE3 without problems http://binary-reverser.org/tools/FullDisasm/FullDisasm.dll или http://reverseengineering.online.fr/spip/IMG/zip/FullDisasm.zip отсюда: http://www.cracklab.ru/f/index.php?action=vthread&forum=3&topic=9198