Хитрости стека

Тема в разделе "WASM.BEGINNERS", создана пользователем Intruder, 26 сен 2006.

  1. Intruder

    Intruder New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2006
    Сообщения:
    6
    код
    Код (Text):
    1. ------------------------
    2. CSEG segment
    3.     assume cs:CSEG, es:CSEG, ds:CSEG, ss:CSEG
    4.      
    5.     org 100h
    6.     begin:
    7.     mov sp,offset mda
    8.     mov ax,9090h
    9.     push ax
    10.     int 20h ; не понимаю вот тут
    11.     mda:
    12.     mov ah,9
    13.     mov dx,offset message
    14.     int 21h
    15.     int 20h
    16.     message db 'блаблабла$'
    17.     CSEG ends
    18. end begin
    19. ------------------------
    Уважаемые, помогите разобраться как идёт переход по коду после int 20h ... Я никак не могу сообразить. понимаю что со стеком какие то хитрости, но смысл не улавливаю...

    тег [ code ] пользуем, не стесняемся
     
  2. Pretorian

    Pretorian New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    33
    Адрес:
    Russia
    Дело в том что номера прерываний берут каждое свой адрес в начале памяти, я уже не помню как и что, т.к. в dos давно не программировал. Но примерно вот такая тема
    int 0 - 0000:0000
    int 1 - 0000:0004
    int 2 - 0000:0008
    ...

    Вот и ищи какой адрес хранится для int20h
     
  3. qwe

    qwe New Member

    Публикаций:
    0
    Регистрация:
    22 сен 2006
    Сообщения:
    5
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    стек растёт сверху вниз. а программа в памяти распологается снизу верх.
    То есть предположим что метка mda имеет смещение 100h, а int 21h - 9Eh(так как в машинном представлении in 21h занимает 2 байта). Когда ты помещаешь в sp 100h, при push, байты 9090h ложатся по адресу 9Eh, а sp = sp - 2;
     
  5. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Ага, по идее вместо int 20h можно было писать хоть ret, хоть что... интересная штука. int 20h - скорее всего имитация завершения, чтобы эвристик там обмануть...

    Intruder
    Посмотреть можно в отладчике, который не работает на стеке отлаживаемой программы, например в SoftIce.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Chingachguk
    Да это баян %)
    Давно это я видел, одна из антиотладочных хитростей.
     
  7. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    n0name

    Ну я чуял что боян, но все равно прикольно ;)
     
  8. Intruder

    Intruder New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2006
    Сообщения:
    6
    Спасибо, разобрался.