Различия в логике PII и P4

Тема в разделе "WASM.ASSEMBLER", создана пользователем Zufyxe, 6 июл 2005.

  1. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Всем привет!



    Сегодня при отладке наткнулся на такой момент:

    инструкция CALL ESP испоняется на P4 следующим образом:

    1. EIP принимает значение ESP

    2. в стек заноситься адрес возврата, ESP уменьшается

    а, вот на PII происходит все наоборот:

    1. в стек заностится адрес возврата, ESP уменьшается

    2. EIP принимает значение ESP



    Наверное есть еще различия в логике выполнения комманд этими процессорами?
     
  2. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Это один и тот-же бинарный код так выполняется?

    Имхо вариант 2 исполнения в этом случае не правильный - управление передается не на точку назначения (esp_.
     
  3. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Гм, этож баг несовместимости pII\III и P4, такой код вылетит на последнем
    Код (Text):
    1. 004010[b]C1[/b] | FFD4 | CALL ESP
    Интересно Intel хоть описали это? Посмотрите кто-то на атлоне!
     
  4. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    - а ты думаешь как я об этом узнал? :) Это один и тот же бинарный код, хорошо отлаженный на P4, внезапно грохнулся при запуске на PII.

    Может кто-нибудь сталкивался еще с подобными примерами "обратной несовместимости"?
     
  5. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    На AMD Athlon XP сначала - записывает адрес возврата в [esp - 4] устанавливает eip = esp, потом уменьшает esp на 4.

    Хм... если перед вызовом call установить esp на комманду назначения, и при этом адресом возврата будет сформирована команда (т.е. адрес специфический) - можно замутить хитрый полиморфизм кода.
    Код (Text):
    1.  
    2.  mov ebx, esp
    3.  mov esp, offset @rp
    4.  call esp
    5. x: ;; addr must spec opcode, ex 4**ccE8h for jmp
    6.  int  3
    7.  nop
    8.  nop
    9.  nop
    10.  nop
    11. @rp: ret
    12.  
    13.  
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    alpet Я так понял Athlon как и P4, можно проверить что покажет код:
    Код (Text):
    1. ;=================================================
    2. ip3         db      'Intel PII\III',0
    3. ip4         db      'Intel P4\Athlon',0
    4. ;=================================================
    5. i4:         add     esp,12
    6.             invoke  MessageBox,0,ip4,ip4,0
    7.             jmp     exit
    8. i3:         add     esp,8
    9.             invoke  MessageBox,0,ip3,ip3,0
    10. exit:       invoke  ExitProcess,0
    11. entry       $
    12.             push    i4
    13.             push    0x082464FF ; jmp dword [esp+8]
    14. times       97      nop
    15.             call    esp
    16.             jmp     i3
    17. ;=================================================
     
  7. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  8. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    intel celeron 1700

    выводит p4/athlon

    ps: то-же самое при запуске из-под vurtual pc
     
  9. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    bogrus

    Угумсь, работает на iCel@2400 и Athlon правильно определяет. Видать имеет место баг в процессорах PII-PIII...
     
  10. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    Надо бы еще на PIII и AMD K6 проверить. Ни у кого нет таких?

    А так тестовая программка pII верно определяет... :)
     
  11. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Zufyxe Яж на PIII и проверял
     
  12. Zufyxe

    Zufyxe New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    137
    Адрес:
    Russia
    - сорри, я сразу и не въехал...
     
  13. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    PIII 866 выводит p2/p3
     
  14. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    Похоже этот баг еще со времен 386 процессора. Сомнительно что в младших Атлонах/AMD-K5/K6 он есть.
     
  15. _staier

    _staier New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2003
    Сообщения:
    738
    Адрес:
    Ukraine
    получается,чтов эксплойтах нельзя call esp использовать
     
  16. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia