Помогите с описанием кода!

Тема в разделе "WASM.BEGINNERS", создана пользователем bagun08, 4 авг 2010.

  1. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    адрес обработчика лежит в двойном слове [int_21_vect], а до самой int_21_vect еще нужно дотянуться - по умолчанию mov работает с ds, а тут чтоб не маятся с его(DS) настройкой учитывается тот факт что переменная находится в кодовом сегменте и проще и надежнее до нее дотянуться через cs:
     
  2. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    когда обработчик будет вызван - содержимое ds уже не будет как при старте программы равной cs так как хрен его знает что исполнялось перед прерыванием
     
  3. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    http://ru.wikipedia.org/wiki/Методы_адресации
    И еще:
    То есть для CALL есть только 4 варианта - 2 близких, 2 дальних. В твоем случае нужен дальний вариант. Можно было сделать его вот так:
    ...
    db 9Ah
    Int21_vect dw 0,0
    ...
    Но автор (Калашников) использует это в 2-х местах, для jmp и для Call. Поэтому логичнее было поместить в переменную, что и сделано.
    К переменной приходится обращаться
    CALL dword ptr [var_name]

    А вот за каким хреном Калашников добавил префикс сегмента... :))) за очень простым! Вызов оригинального обработчика int 21h идет из резидентной части. Следим за логикой!

    - установлен перехват вектора прерывания.
    - в процедуру перехвата попадаем из ЧУЖОГО сегмента (ну да, кто его знает, откуда оно вызывается?)
    - следовательно, регистры и сегментные регистры НЕ НАШИ, то есть что именно там - неизвестно
    - однако, в сегментном регистре CS мы можем быть уверены - управление-то у нас! Значит, вместо DS по умолчанию, приходится явно указывать префикс CS - чтоб прочитать именно тот адрес, который нужен.

    Еще вопросы?
     
  4. bagun08

    bagun08 New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    8
    Мляаааааааааааааааа, ну когда же я увижу эту гребанную матрицу???
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    bagun08
    Бросьте Калаша, возьмите Пирогова.
     
  6. skomarov

    skomarov New Member

    Публикаций:
    0
    Регистрация:
    14 май 2008
    Сообщения:
    389
    bagun08
    Может быть рано ещё заниматься резидентными программами?
     
  7. bagun08

    bagun08 New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    8
    Вопросы есть, все понятно кроме того что: как [int_21_vect+2] переместилось в cs?
     
  8. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    абсолютно также, как [int_21_vec] переместилось в IP
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.625
    Адрес:
    Russia
    пардон, я наконец понял про что вы спрашиваете
    после того как вы запускаете свою программу она располагается в памяти одним куском, причем на этот кусок настроены все сегментные регистры

    поэтому мы можем написать в части инициализации
    mov word ptr Int_21_vect,bx
    mov word ptr Int_21_vect+2,es

    так как что ds(который по умолчанию, надеюсь вы понимаете что mov word ptr Int_21_vect,bx читается как mov DS:word ptr Int_21_vect,bx хоть DS там и не стоит), что cs - который можно явно указать, означают одно и тоже
    так что можете написать
    mov CS: word ptr Int_21_vect,bx
    mov CS: word ptr Int_21_vect+2,es

    вы заметили что в вашей программе вызова Int_21_proc нету ???

    задайте себе вопрос как управление попадет на вашу Int_21_proc ??

    скорее всего это произойдет если какой-то другой программе встретится последовательность
    mov ah,9
    int 21h

    как вы думаете автор этой программы знает о вашем вирусе ??? очевидно нет - так что настраивать ds на сегмент с вашим кодом и данными не будет

    единственное на что вы можете расчитывать это на то что инструкция int 21h загрузит CS:IP = seg:ofs(Int_21_proc)
    об остальных регистрах вам ничего не известно - вот и приходится выкручиваться зная что ваша строка гдето рядом с кодом
    вы можете
    mov AX,CS
    mov DS,AX

    или использовать префикс CS
     
  10. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    Booster
    сменить шило на мыло
    или хрен на хрен ыхых
     
  11. bagun08

    bagun08 New Member

    Публикаций:
    0
    Регистрация:
    4 авг 2010
    Сообщения:
    8
    вово!
     
  12. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    701
    Ну я юрова как справочник пользовал в основном .. а так отладчик в руки и вперед
    а вообще если нужно тексты найти легко - тот же абель - изцелион для венды если и т.д.
     
  13. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    вот о том и речь изначально и была -- челу дос нужен, пусть курит абеля.

    а долбить юрова/зубкова/калашникова/пирогова -- пустая трата времени имхо.
     
  14. Guru_of_Zen

    Guru_of_Zen Member

    Публикаций:
    0
    Регистрация:
    21 янв 2010
    Сообщения:
    288
    bagun08

    кстати у абеля про режимы адресации, да и вообще про саму суть адесации написано имхо идеально.

    сразу глупыя вопросы отпадут ;)