Всем привет! Сегодня при отладке наткнулся на такой момент: инструкция CALL ESP испоняется на P4 следующим образом: 1. EIP принимает значение ESP 2. в стек заноситься адрес возврата, ESP уменьшается а, вот на PII происходит все наоборот: 1. в стек заностится адрес возврата, ESP уменьшается 2. EIP принимает значение ESP Наверное есть еще различия в логике выполнения комманд этими процессорами?
Это один и тот-же бинарный код так выполняется? Имхо вариант 2 исполнения в этом случае не правильный - управление передается не на точку назначения (esp_.
Гм, этож баг несовместимости pII\III и P4, такой код вылетит на последнем Код (Text): 004010[b]C1[/b] | FFD4 | CALL ESP Интересно Intel хоть описали это? Посмотрите кто-то на атлоне!
- а ты думаешь как я об этом узнал? Это один и тот же бинарный код, хорошо отлаженный на P4, внезапно грохнулся при запуске на PII. Может кто-нибудь сталкивался еще с подобными примерами "обратной несовместимости"?
На AMD Athlon XP сначала - записывает адрес возврата в [esp - 4] устанавливает eip = esp, потом уменьшает esp на 4. Хм... если перед вызовом call установить esp на комманду назначения, и при этом адресом возврата будет сформирована команда (т.е. адрес специфический) - можно замутить хитрый полиморфизм кода. Код (Text): mov ebx, esp mov esp, offset @rp call esp x: ;; addr must spec opcode, ex 4**ccE8h for jmp int 3 nop nop nop nop @rp: ret
alpet Я так понял Athlon как и P4, можно проверить что покажет код: Код (Text): ;================================================= ip3 db 'Intel PII\III',0 ip4 db 'Intel P4\Athlon',0 ;================================================= i4: add esp,12 invoke MessageBox,0,ip4,ip4,0 jmp exit i3: add esp,8 invoke MessageBox,0,ip3,ip3,0 exit: invoke ExitProcess,0 entry $ push i4 push 0x082464FF ; jmp dword [esp+8] times 97 nop call esp jmp i3 ;=================================================
bogrus Угумсь, работает на iCel@2400 и Athlon правильно определяет. Видать имеет место баг в процессорах PII-PIII...
Надо бы еще на PIII и AMD K6 проверить. Ни у кого нет таких? А так тестовая программка pII верно определяет...
Zufyxe В P2 видимо вообще много крутых багов: http://66.102.9.104/search?q=cache:RX8J5buUR-0J:www.wasm.ru/forum/inde x.php%3Faction%3Dvthread%26forum%3D10%26topic%3D6361+%D0%B7%D0%B0%D0%B F%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C+%D0%BD%D0%B0+Dual+P2-300&hl=en Запустил прогу на P2 - показывает Intel P2-P3...