Работа pop dword ptr [esp+4]

Тема в разделе "WASM.ASSEMBLER", создана пользователем dermatolog, 10 окт 2006.

  1. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    Помню на старом форуме была тема с алгоритмом работы
    pop dword ptr [esp+4]
    на разных процах (если я ничего не путаю)
    Тему найти не смог :dntknw:(

    Например:
    esp = 12FDB8
    pop dword ptr [esp+4] пишет на моем Athlon 64 в адрес=12FDC0

    Просьба - опубликуйте результаты выполнения команды для разных процессоров (как это работает на разных процах).
     
  2. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Код (Text):
    1. 004010BF >/$  68 78563412   push 12345678
    2. 004010C4  |.  8F4424 04     pop dword ptr ss:[esp+4]
    верхушка стека после push:
    0012FFC0 12345678
    0012FFC4 7C816D4F RETURN to kernel32.7C816D4F
    0012FFC8 00000000

    верхушка стека после pop:
    0012FFC4 7C816D4F RETURN to kernel32.7C816D4F
    0012FFC8 12345678
    0012FFCC 00000000
     
  3. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    А че за проц ?
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    0006FFC0 12345678
    0006FFC4 7C816FD7 RETURN to kernel32.7C816FD7
    0006FFC8 7C910738 ntdll.7C910738

    0006FFC4 7C816FD7 RETURN to kernel32.7C816FD7
    0006FFC8 12345678
    0006FFCC FFFFFFFF

    Athlon64
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    push/pop, pushad/popad начиная с 286-го сначала выполняют действие, а потом изменяют esp. До 286 было наоборот - сначала изменялся esp, потом выполнялось действие...
     
  6. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    стремная команда, такая же как call esp, которая на разных процах
    выполняется по-разному
     
  7. koderr

    koderr New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2006
    Сообщения:
    205
    Celeron 2.6 GHz
     
  8. dermatolog

    dermatolog Member

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    406
    Адрес:
    Екатеринбург
    А двуядерника ниукого нет ?
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    [IA-32 Intel® Architecture Software Developer's Manual. Volume 2B - Instruction Set Reference, N-Z] 25366720.pdf
     
  10. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    че-то я запутался
    вроде написано что esp увеличивается ДО перезаписывания
    что они имели ввиду?
     
  11. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Хм. У Зубкова написано про то, что esp изменяется после выполнения (правда, он говорит о push/pop esp, а не о адресации). Очередная опечатка у него?
     
  12. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Athlon XP 2000

    Код (Text):
    1. push  esp:
    2.  a = esp
    3.  esp -= 4
    4.  [esp] = a
    5.  
    6. pop  esp:
    7.  a = [esp]
    8.  esp += 4 ; для наглядности :)
    9.  esp = a
    10.  
    11. push [esp]:
    12.  a = [esp]
    13.  esp -= 4
    14.  [esp] = a
    15.  
    16. pop  [esp]:
    17.  a = [esp]
    18.  b = esp
    19.  esp += 4
    20.  [b] = a
     
  13. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Если память мне не изменяет, pop esp всегда просто увеличивает esp на 4.
     
  14. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    приехали
     
  15. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    2Ustus

    Тогда уж скорее выполняет просто mov esp, [esp] без инкремента. Хотя врядли в процессоре обрабатывается эта ситуация. Думаю есть и инкремент регистра и последующая его перезапись... :)
     
  16. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Гоню... перепутал с popad - при его выполнении esp пропускается.
    А насчет остального - почему бы не покурить мануалы?
     
  17. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    наконец-то доходит до меня что имелось в виду - esp после изменения не увеличиватся еще и на 4
    понятно
     
  18. mathio

    mathio New Member

    Публикаций:
    0
    Регистрация:
    16 июн 2007
    Сообщения:
    110
    dermatolog и все-все-все,

    никакой разницы в выполнении данной команды на современных платформах от Intel и AMD нет. Иначе это были бы уже не совместимые на уровне общих команд процессоры.
    Вот как выглядит их логика на C, никакой магии, всё четко и предельно просто:

    push dword ptr[esp+n]:
    Код (Text):
    1. unsigned char * esp;
    2. //...
    3. *(unsigned int*)&esp[-4] = *(unsigned int*)&esp[n];
    4. esp -= 4;
    pop dword ptr[esp+n]
    Код (Text):
    1. unsigned char * esp;
    2. //...
    3. esp += 4;
    4. *(unsigned int*)&esp[n] = *(unsigned int*)&esp[-4];