Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 199
от 28.07.2005, 21:30

Администратор:Калашников О.А.
В рассылке:Подписчиков: 250, Экспертов: 18
В номере:Вопросов: 5, Ответов: 12


Вопрос № 23910: Здраствуйте. Что нужно, в програмном плане, для начала самообучения на асамблере, под Windows. Бытует мнение, что для этого недо прикупить старенький комп и на нём обучатся, иначе можно повредить свой основной комп. Вообще для этого надеюсь ...
Вопрос № 23915: Скажите как зделать чтоб выводилась строка нпример ЖОлТого цвета.. вот шмацы кодинга и??немогу собрать и понять 0_O! помогити плиз. ;""ИЗВИНИТЕ ЗА ГРАМАТНОСТЬ РУССКИЙ НЕ ИЗУЧЯЛ! ...
Вопрос № 23916: Ds:0000 будет 8484 >ax почяму веть не указывалясь ds? И в td нечирта не видно? ES – дополнительный сегментный di - индекс приемника ds - Сегмент данных немогу понять помогите плиз. ...
Вопрос № 23918: Здраствуйте. Я пытаюсь изучать асамблер по руководству Калашникова. И когда я компилирую вот етот текст: CSEG segment org 100h Begin: mov ax,0B800h mov es,ax mov di,0 mov al,1 mov ah,31 mov cx,2...
Вопрос № 23926: Добрый день! Изучаю 20 урок. Там речь идет о вирусе. Там написано, что первые 6 байт «файла жертвы» мы храним в массиве First_bytes db 4 dup (90h), 0CDh, 20h. Но как я понимаю мы эти первые 6 байт заносим за концом вируса, т.е. после этого массив...

Вопрос № 23.910
Здраствуйте.
Что нужно, в програмном плане, для начала самообучения на асамблере, под Windows.
Бытует мнение, что для этого недо прикупить старенький комп и на нём обучатся, иначе можно повредить свой основной комп. Вообще для этого надеюсь не обязательно ставить DOS?
Отправлен: 23.07.2005, 15:25
Вопрос задал: Васильков Николай Петрович (статус: Специалист)
Всего ответов отправлено: 3

Отвечает: Стас
Здравствуйте, Васильков Николай Петрович!
>повредить свой основной комп.
Повредить комп с помощью ассемблера сложно, можно угробить инфу на винте, и то...
А под виндами сделать это еще сложнее.
DOS ставить не надо -он у тебя уже есть :).
Из программных продуктов нужен блокнот - для написания текста проги,
пакет которым будешь компилировать, напр. MASM32.
И желательно дебаггер - тут уж на вскус и цвет - S-ICE, Olly...
Ответ отправил: Стас (статус: Практикант)
Отправлен: 24.07.2005, 00:51
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ, не можешь ли подказать сайты с помощью по асамблеру, где взять компиляторы - ответ можно в минифоруме.

Отвечает: ASMодей
Здравствуйте, Васильков Николай Петрович!
Повредить сам компьютер вам вряд ли удастся, а вот повредить информацию на дисках можно, поэтому советую использовать специальные программы - эмуляторы компьютеров. Наиболее типичные представители - VMWare (советую), VirtualPC (не советую :) и Bochs (тоже советую, но не для начала обучения, а несколько попозже).
Ответ отправил: ASMодей (статус: Профессионал)
Отправлен: 24.07.2005, 15:16

Отвечает: Евгений Иванов
Здравствуйте, Васильков Николай Петрович!
запросто, если будешь орудовать с портами CMOS или диска.
хотя просто испортишь логически, а физически можно только видеокарту или монитор подпалить, если неправильно программировать видеоадаптер, хотя все правила описаны, читай внимательно.

удачи.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 27.07.2005, 19:12
Оценка за ответ: 5
Комментарий оценки:
Спасибо, интересный ответ.


Вопрос № 23.915
Скажите как зделать чтоб выводилась строка нпример ЖОлТого цвета..
вот шмацы кодинга и??немогу собрать и понять 0_O! помогити плиз.

;""ИЗВИНИТЕ ЗА ГРАМАТНОСТЬ РУССКИЙ НЕ ИЗУЧЯЛ!

Приложение:

Отправлен: 23.07.2005, 18:02
Вопрос задал: IngineringG (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, IngineringG!
По этому коду ничего сказать нельзя, здесь нет "нашего резидента", который собственно и должен вывожить цветной текст.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 24.07.2005, 00:24

Отвечает: Ayl
Здравствуйте, IngineringG!

В видеопамяти для символа отводится 2 байта: один для кода символа, второй - для аттрибута.
Что же такое аттрибут?
Это такая фишка, которая сообщает видеокарте, каким цветом и на каком фоне отображать символ. Вот его формат:
BFFFCCCC, где:
B - признак мерцания или повышенной интенсивности фона (что именно, определяется установками регистров видеокарты)
FFF - код цвета фона (0-7)
CCCC - код цвета символа (0-15)

Если ты хочешь вывести желтые символы на черном фоне, то в качестве CCCC надо установить 14 (при стандартной установке политры), а в качестве FFF - 0. В качестве B - тоже 0.
Итак, байт аттрибута будет 00001110 = 0eh
См.код.

Приложение:

---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени

Ответ отправил: Ayl (статус: Профессор)
Отправлен: 25.07.2005, 11:47
Оценка за ответ: 5


Вопрос № 23.916

Ds:0000 будет 8484 >ax
почяму веть не указывалясь ds?
И в td нечирта не видно?
ES – дополнительный сегментный
di - индекс приемника
ds - Сегмент данных
немогу понять помогите плиз.

Приложение:

Отправлен: 23.07.2005, 18:04
Вопрос задал: IngineringG (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, IngineringG!
заметь ты не только DS не указал, но и DI!!
Дело собственно вот в чем, кдгда ты грузишь COM прогу в дебаггер он чистит все регистры AX=BX....=SI=DI=0, SP естественно указывает на стек, а CS=DS=ES!
Именно потому что ES = DS, а di=0 у тебя такой результат.
Стоит заметить, что при запуске без дебаггера, результаты будут не столь радужные. И не забывать инициализировать (давать какие нибудь осмысленные значения) все регистры которые собираешся использовать.

Ответ отправил: Стас (статус: Практикант)
Отправлен: 24.07.2005, 00:37

Отвечает: Евгений Иванов
Здравствуйте, IngineringG!
и так будет работать. использовалось то, что нужно по алгоритму работы
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 27.07.2005, 20:23


Вопрос № 23.918
Здраствуйте.
Я пытаюсь изучать асамблер по руководству Калашникова. И когда я компилирую вот етот текст:

CSEG segment
org 100h

Begin:
mov ax,0B800h
mov es,ax
mov di,0
mov al,1
mov ah,31
mov cx,2000

Next_face:
mov es:[di],ax
add di,2
loop Next_face

mov ah,10h
int 16h
int 20h

CSEG ends
end Begin
с помощю TASM виплывает ошибка:

**Error** 1.asm<15> Near jump or call to different CS.

Што мне делать?

Зарание блогодарен.
Отправлен: 23.07.2005, 19:00
Вопрос задал: mOrteR (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Стас
Здравствуйте, D.O.O.!
Дело в том что ассемблер не знает чему у тебя равен CS, поэтому укажи ему, поставь после CSEG segment строку
assume cs:CSEG, ds:CSEG, ss:CSEG, es:CSEG
и все заработает.
Ответ отправил: Стас (статус: Практикант)
Отправлен: 24.07.2005, 00:42
Оценка за ответ: 5

Отвечает: Ayl
Здравствуйте, D.O.O.!

Поставь ASSUME cs:CSEG после CSEG segment
---------
Трудное - то, что можно сделать немедленно. Невозможное - то, для выполнения чего требуется немного больше времени
Ответ отправил: Ayl (статус: Профессор)
Отправлен: 25.07.2005, 11:50

Отвечает: Евгений Иванов
Здравствуйте, D.O.O.!
добавь директивы ASSUME и MODEl.

---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 27.07.2005, 20:36


Вопрос № 23.926
Добрый день!
Изучаю 20 урок. Там речь идет о вирусе. Там написано, что первые 6 байт «файла жертвы» мы храним в массиве First_bytes db 4 dup (90h), 0CDh, 20h. Но как я понимаю мы эти первые 6 байт заносим за концом вируса, т.е. после этого массива:
mov ah,3Fh
mov cx,F_bytes ;Читаем первые шесть байт "файла-жертвы"...
mov dx,offset Finish ;...в хвост нашего вируса.
int 21h
И читаем их потом тоже с этой области памяти:
mov ah,40h ;После тела вируса дописываем первые
mov cx,F_bytes ;настоящие шесть байт "файла-жертвы"...
mov dx,offset Finish
int 21h
Но зачем тогда этот массив?
Заранее спасибо за ответ.
Отправлен: 23.07.2005, 20:33
Вопрос задал: Programist (статус: Посетитель)
Всего ответов отправлено: 2

Отвечает: Стас
Здравствуйте, Programist!
Там же написано, чтобы при первом запуске сработало INT20
Кроме того возможно эти байты участвуют в подсчете длины. (влом разбираться)
Ответ отправил: Стас (статус: Практикант)
Отправлен: 24.07.2005, 00:57

Отвечает: mvp
Здравствуйте, Programist!
Урок не читал, но судя по всему, заражение происходит следующим образом. Найдя подходящий файл-жертву, читается первые его 6 байт и сохраняются в области памяти в конце кода вируса. Далее вычисляется точка входа вируса в заражённый файл и в начало заражённой программы прописывается переход на точку входа вируса (когда вирус получит управление, сделает своё дело, восстановит старые 6 байт заражённой программы, но уже в памяти и передаст ей управление). Далее необходимо записать код вируса в конец файла (подозреваю, что так и есть), в том числе и сохранённые оригинальные первые шесть байт жертвы.
Предполагаю, что дописать в файл код вируса вместе с этими 6-ю байтами можно было сразу, т. к. они располагаются последовательно. Но, видимо, для наглядности запись кода разделили.
А массив таки надо: Во-первых, чтобы хранить эти 6 байт до записи, а во-вторых этот массив эквивалентен командам:
nop
nop
nop
nop
int 20h
Т. е., если запустить скомпилированный исходник вируса и запустить его, то вирус будет считать, что заразил программу, состоящую из этих строчек, т. е. отработав в первый раз, он передаст управление на эти строчки, которые и завершат работу программы (Int 20h).
Всё вішесказанное лишь предположение, т. к. исходника не видел. Но могу предположить, что это com-вирус и тогда было-бы достаточно обойтись 3 байтами, вместо шести:
First_bytes db 90h, 0cdh, 20h
, т. к. переход происходит в пределах сегмента и длина команды такого перехода как раз 3 байта.
---------
Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: 3-ий класс)
Отправлен: 25.07.2005, 13:10
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.

Яндекс


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться
Вспомнить пароль

В избранное