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

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


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

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

Выпуск № 340
от 11.08.2002, 20:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 954
Отправлено ответов: 2821
Активность: 295.7 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе]


 Список экспертов, ответы которых опубликованы в данном выпуске

Pablo
Статус: Опытный
Общий рейтинг: 129.82
URL: Моя страничка
[Подробней >>]
Александр
Статус: Профессиональный
Общий рейтинг: 118.47
[Подробней >>]
Gibbel
Статус: Опытный
Общий рейтинг: 109.64
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
masquer
Статус: Профессиональный
Общий рейтинг: 159.27
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 119.77
[Подробней >>]
ASMодей
Статус: Опытный
Общий рейтинг: 128.41
[Подробней >>]
 
LIFO
Статус: Доверительный
Общий рейтинг: 136.5
[Подробней >>]
Dark_Lord
Статус: Доверительный
Общий рейтинг: 126.66
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 137.21
[Подробней >>]
 
AnSim
Статус: Опытный
Общий рейтинг: 110.41
[Подробней >>]
baldr
Статус: Профессиональный
Общий рейтинг: 117.74
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
copycon
Статус: Начальный
Общий рейтинг: 111.53
[Подробней >>]
 
Топор
Статус: Профессиональный
Общий рейтинг: 117.98
URL: Хорошая Русская Металлическая команда
Телефон: (8462)500298
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 113.31
[Подробней >>]
Sergey Lizin
Статус: Начальный
Общий рейтинг: 103.64
[Подробней >>]
 
Igoryk
Статус: Опытный
Общий рейтинг: 112.71
URL: В помощь программисту
[Подробней >>]
Shal
Статус: Опытный
Общий рейтинг: 107.71
[Подробней >>]
kvINT
Статус: Опытный
Общий рейтинг: 111.75
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 913. Здравствуйте уважаемые Эксперты! Вопрос в общем не по ассемблеру, но очень нужна ваша помощь - никак... (ответов: 1)
Вопрос № 914. Здраствуйте уважаемые господа эксперты. Вот решил вам задать наболевший для многих вопрос. Как скопи... (ответов: 3)
Вопрос № 915. Здравствуйте эксперты! Какой функцией и какого прерывания можно открыть файл (не прочитать в память(... (ответов: 7)
Вопрос № 916. Здравствуйте. На сайте www.kalashnikoff.ru взял книгу по написанию вирусов. Я никак не могу понять, ... (ответов: 5)
Вопрос № 917. Здравствуйте. Я снова про открытие файла...Я имею введу что когда я делаю так(см. Приложение),то Vo... (ответов: 1)
Вопрос № 919. Добрый день. Буду очень рад если подскажете как выделить память буффера для шифрофания если ето COM... (ответов: 4)
Вопрос № 920. У меня ламерский вопрос. Только начал изучать asm. Зачем нужна строчка 06. Почему AX и почему 9 (01)... (ответов: 13)

Вопросов: 7, ответов: 34


 Вопрос № 913

Здравствуйте уважаемые Эксперты!
Вопрос в общем не по ассемблеру, но очень нужна ваша помощь - никак не могу найти подробную инфу по майлслотам - вообще что это такое и с чем их едят. Пытался ОЧЕНЬ внимательно почитать СДК - безрезультатно, много неясного. наваял в дельфи пробную прогу - майлслот вроде бы и создается, как с его помощью обмен данными по сетке реализовать - не знаю. У кого есть исходники - поделитесь плиз, а то уже неделю мучаюсь. Заранее спасибо.
С уважением, Диман



Вопрос отправлен: 07.08.2002, 11:53
Отправитель: Диман (dv2000@hotbox.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Приветствую Вас, Диман!
Ну есть в Дельфях компонент TNMSMTP и TNMPOP3 они как раз и предназначены для рабты с почтой, а работает они просто если отправить какой либо пакет нужно то он отправляется методами writeln или write, ну а принять паект можно методами read и readln, это методы TPowersocks, ну а в компонентах TMNPOP3 есть методы специальные для приема сообщений из почтового ящика, а в TNMSMTP для отправки сообщений.


Ответ отправлен: 07.08.2002, 19:35
Отправитель: Pablo


 Вопрос № 914

Здраствуйте уважаемые господа эксперты.
Вот решил вам задать наболевший для многих вопрос.
Как скопировать CD с защитой StarForce (protect.dll)?
Заранее извеняюсь за оффтопик.



Вопрос отправлен: 07.08.2002, 13:13
Отправитель: x_alex (x_night@amur.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Александр

Приветствую Вас, x_alex!
Насколько мне известно, то это возможно только побитовым копированием. Причём дисковод должен поддерживать функцию efm. Хотя на самом деле я не видел ни одной копии программ со StarForce, работавших без крека, поэтому я не ручаюсь за работоспособность побитовой копии. Универсальных креков как для SafeDisc и т.п. мной пока тоже не замечено...


Ответ отправлен: 08.08.2002, 07:05
Отправитель: Александр


Отвечает Gibbel

Здравствуйте, x_alex!
Есть такая прога - CloneCD. Копирует все (по крайней мере, у меня нет ни одного диска, который она не смогла бы скопировать).

Ответ отправлен: 07.08.2002, 13:46
Отправитель: Gibbel


Отвечает masquer

Добрый день, x_alex!Наболевший для многих? Ну, за всех не надо. А скопировать на стационарном приводе у тебя не получиться, ну не может привод субканал копировать, это только в заводских условиях. По крайней мере, я о таких приводах не слышал.


Ответ отправлен: 07.08.2002, 13:49
Отправитель: masquer


 Вопрос № 915

Здравствуйте эксперты!
Какой функцией и какого прерывания можно открыть файл (не прочитать в память(3Dh),а открыть, как это делает пакетный файл ДОСа?
Всем Спасибо!




Вопрос отправлен: 07.08.2002, 17:42
Отправитель: R@ptor (Spinosaur@narod.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает igorash

Здравствуйте, R@ptor!
Че-то недопонял.... а как это пакетный файл делает, в нем вроде нет команд на открытие файла... а 3D его не читает а открывает и ассоциирует с ним хендл


Ответ отправлен: 07.08.2002, 18:44
Отправитель: igorash


Отвечает ASMодей

Здравствуйте, R@ptor!
Не понял вопроса: функция 3Dh как раз и используется для
открытия файла, а в память файл читается функцией 3Fh.
А пакетный файл DOSа много чего может делать, ты бы
написал конкретную команду, может стало бы понятней.


Ответ отправлен: 08.08.2002, 10:26
Отправитель: ASMодей


Отвечает Pablo

Добрый день, R@ptor!
Между прочим функция 3dh именно открывает файл и занимает его указанным типом доступа. А читает в память файл функция 3fh.
А как открывает файл пакетный файл ДОСа?!

Ответ отправлен: 08.08.2002, 13:35
Отправитель: Pablo


Отвечает masquer

Приветствую Вас, R@ptor!
А что в твоем понимании открыть файл.
С файлом вообще по такой схеме работают: получение/открытие хендла файла, операции с файлом - чтение, запись, закрытие хендла.
А как делает пакетный файл?

Ответ отправлен: 07.08.2002, 18:08
Отправитель: masquer


Отвечает LIFO

Приветствую Вас, R@ptor!
А что ты подразумеваешь под словом открытие?
Всегда данные считываются в сиандартную память в 640 кило.
В частности функцией 3fh.
А уж потом манипулируй с ними как хочешь.









Ответ отправлен: 07.08.2002, 19:07
Отправитель: LIFO


Отвечает Dark_Lord

Добрый день, R@ptor!
А что, 3Dh загружает файл в память, странно... Мне кажется Вы не правильно поняли эту функцию, она возвращает не адрес в памяти а так называемый Handle, который по другому можно назвать указатель!

Ответ отправлен: 07.08.2002, 20:33
Отправитель: Dark_Lord


Отвечает Broken Sword

Приветствую Вас, R@ptor!
чето ты запорол... 3D - открыть СУЩЕСТВУЮЩИЙ ФАЙЛ (никуда ничего не читается) а 3F - уже чтение файла.

Ответ отправлен: 07.08.2002, 20:45
Отправитель: Broken Sword


 Вопрос № 916

Здравствуйте.
На сайте www.kalashnikoff.ru взял книгу по написанию вирусов. Я никак не могу понять, если меняется смещение области данных вируса, то почему корректируют регистр DS, который отвечает за сегмент области данных. Заранее благодарю за ответ.



Вопрос отправлен: 07.08.2002, 18:29
Отправитель: Борис

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Добрый день, Борис!
Доступ к адресам в ДОС осуществляется с помощью 2-х регистров сегментного и смещения. Но адресуют они очень хитрым способом
для получение абсолютного адреса процессор делает следующее, сдвигает содержимое серментного регистра на 4 разряда влево, а затем добавляет к полученному результату содержимое регистра смещения, результатом является адрес ячейки памяти, к которой произведен доступ.
Например:
ds = 1001h
dx = 0
es = 1000h
bx = 10h
Так вот команды mov ax, ds:[dx] и mov ax, es:[bx] совершенно идентичны, если используемые регистры содержат приведенные выше значения.


Ответ отправлен: 08.08.2002, 13:35
Отправитель: Pablo


Отвечает ASMодей

Доброе время суток, Борис!
Вообще без примера не очень понятно что там делается, но
может быть дело в следующем: если смещение изменяется на
величину кратную 16 (размер параграфа), то в этом случае
можно корректировать адрес данных, изменяя регистр DS.


Ответ отправлен: 08.08.2002, 10:28
Отправитель: ASMодей


Отвечает AnSim

Добрый день, Борис!
меняется смещение области данных (!) вируса, то почему корректируют регистр DS, который отвечает за сегмент области данных (!)
ничего похожего не нашел в этих 2-х фразах?

Ответ отправлен: 08.08.2002, 13:07
Отправитель: AnSim


Отвечает LIFO

Добрый день, Борис!
Это делается для оттого, что в зараженной программе данные вируса сдвигаются на длину самой программы. Принято , что расчеты производятся в параграфах, вот и приходится округлять и прибавлять полученное число в ds.

Ответ отправлен: 07.08.2002, 19:07
Отправитель: LIFO


Отвечает baldr

Здравствуйте, Борис!
Тут надо смотреть сам текст.. Возможно, меняется не только смещение, но и сегмент, а может
быть, DS был раньше настроен на что-то другое...


Ответ отправлен: 09.08.2002, 01:31
Отправитель: baldr


 Вопрос № 917

Здравствуйте.
Я снова про открытие файла...Я имею введу что когда я делаю так(см. Приложение),то Volcov не открывается(на дисплее его нет).А в пакетном файле я пишу путь к Волкову и при открытии моего пакетного файла я вижу волкова(я уже в оболочке).
Вот это мне и надо от программы на ассемблере...


Приложение:


Вопрос отправлен: 07.08.2002, 18:59
Отправитель: R@ptor (Spinosaur@narod.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Здравствуйте, R@ptor!
Хе-хе, да тебе его просто запустить нужно. Ну приблизительно так делается. Хотя за подробностями лучше TechHelp посмотри - я досом не занимаюсь.
ax=4b00h
dx=c:vc.com
bx=addr ExecParamRec


Ответ отправлен: 08.08.2002, 16:45
Отправитель: masquer


 Вопрос № 919

Добрый день.
Буду очень рад если подскажете как выделить память буффера для шифрофания если ето COM-программа.,используя 48 функцию 21 прерывания
Заранее благодарен.
До свидания.


Приложение:


Вопрос отправлен: 07.08.2002, 19:43
Отправитель: DARK_ALISON

[Следующий вопрос >>] [Список вопросов]

Отвечает Pablo

Доброе время суток, DARK_ALISON!
Посе загрузки в память COM программа имеет в своем распоряжении вся память, в отличие от EXE-программы которая загружается в память в созданный для нее блок подходящий по размеру.

Ответ отправлен: 08.08.2002, 13:35
Отправитель: Pablo


Отвечает LIFO

Здравствуйте, DARK_ALISON!
ah=48h
bx = число параграфов
C com - прогами немного сложнее. Прога такого типа всегда выделяет под себя максимальный кусок памяти , поэтому перед выделением блока функцией 48h нужно вначале освободить блок ф.49h, а уж потом выделять этот блок под свои нужды.

Ответ отправлен: 08.08.2002, 15:54
Отправитель: LIFO


Отвечает ASMодей

Здравствуйте, DARK_ALISON!
При запуске программы, DOS выделяет ей для использования
всю оставшуюся свободную память. Так что данные можно
записывать сразу после конца программы:
;для COM-программы
mov ax,cs
add ax,1000h
mov es,ax
sub di,di
;теперь в ES:DI находится адрес свободной памяти
Если же использовать функцию 48h, то перед ее
вызовом необходимо выполнить функцию 4Ah, уменьшив
количество памяти выделенное программе (иначе DOS не сможет
выделить большой блок памяти):
push cs
pop es
mov bx,1000h ;COM-программа не может занимать
mov ax,4Ah ;более одного сегмента
int 21h
mov bx,BUFER_SIZE
mov ax,48h
int 21h


Ответ отправлен: 08.08.2002, 10:29
Отправитель: ASMодей


Отвечает Broken Sword

Здравствуйте, DARK_ALISON!
не углубляясь в суть проблемы - у тебя в bx должен быть размер блока в 16-байтных ПАРАГРАФАХ!!! А у тебя что?? (1200*16) параграфов это знаешь сколько байт? тем более нахрена ты влепил .radix 16, если
mov bx,1200*16
это равносильно mov bx,1200h*16h это примерно сто тысяч, в bx не влезет. Вообщем, напорол ты боков...
и вообще не нада тебе ничего выделять, кода то не так много, пиши в конце buffer db code_len dup (?) оно места не займет и не парься (тем более если взять в соображение факт, что при загурзке комника дос сам выделяет ему по минимуму FFFF байт, т.е. по-любому хватит)


Ответ отправлен: 07.08.2002, 20:45
Отправитель: Broken Sword


 Вопрос № 920

У меня ламерский вопрос. Только начал изучать asm.
Зачем нужна строчка 06. Почему AX и почему 9
(01) CSEG segment
(02) org 100h
(03)
(04) Begin:
(05)
(06) mov ah,9
(07) mov dx,offset Message
(08) int 21h
(09)
(10) int 20h
(11)
(12) Message db 'Hello, world!$'
(13) CSEG ends
(14) end Begin



Вопрос отправлен: 07.08.2002, 20:42
Отправитель: DAS

[Следующий вопрос >>] [Список вопросов]

Отвечает AnSim

Приветствую Вас, DAS!
Потому что 9 - функция 21-го прерывания - вывод на экран - так надо!

Ответ отправлен: 08.08.2002, 13:48
Отправитель: AnSim


Отвечает Pablo

Здравствуйте, DAS!
В данном случает загрузка в регистр ah значения и следующее на ним прерывание означает, что в данном куске программы будет использоваться функция по номеру загруженному в регистр ah из серсива предоставляемнго данным прерыванием.

Ответ отправлен: 08.08.2002, 13:35
Отправитель: Pablo


Отвечает copycon

Здравствуйте, DAS!
Настоятельно советую читать TechHelp и
InterruptList
От-туда ты узнаеш что при вызове прерывания
(int 21h - вызов 21h прерывания)
обработчику прерывания (почти всегда) необходимо
передать параметры - они передаються через регистры
(тоже почти всегда)
21h - главное прерывание для работы с DOS'ом
и в регистре AH(AX) передаетсь номер функции
09h - функция отображения строки на экран
другие функции этого прерывания делают очень
разные вещи.
Начиная от простейших - отображения одного символа,
считывания с клавиатуры символа и заканчивая работой
с файлами, памятью, сетью.
Различные резиденты (TSR) могут менять и|или добавлять
свои функции.
Пример: UNIVBE - добавляет к int10h функции по работе
с VGA, SVGA режимами экрана
SHARE - меняет работу с файлами
и т.д.
Удачи.


Ответ отправлен: 09.08.2002, 22:25
Отправитель: copycon


Отвечает Топор

Здравствуйте, DAS!
Ну, это просто. Перед вызовом прерывания DOS (int 21h) передаём ему параметры - в AX причину вызова (9 - вывод строки), в DX - адрес строки.


Ответ отправлен: 08.08.2002, 10:09
Отправитель: Топор


Отвечает vitya

Добрый день, DAS!
Передается номер фуннкции, обычно это делается через регистр AX, если функций меньше то ah можно al. Прерывания от мышки, например, работают через AX.

Ответ отправлен: 08.08.2002, 08:27
Отправитель: vitya


Отвечает Sergey Lizin

Доброе время суток, DAS!
Вопрос на самом деле ламмерскмй. Ну что-ж,
Прерывание 21h - прерывание с функциями, очень похожее на набор стандартных процедур в любом языке программирования. В регистр ah заносится номер функции, например функция 9 - вывести на экран строку символов.
Счастливо.

Ответ отправлен: 08.08.2002, 09:21
Отправитель: Sergey Lizin


Отвечает Igoryk

Добрый день, DAS!
Это 09 - это функция вывода на экран.
Почему AX? Потому, что того требует прерывание 21h, регистр AX может вмещать в себя максимум 2 байта, т.е. функций, вызванных через это прерывание может быть FFFFh. Части этих функций несуществует, а возможные значения просто зарезервированы.

Ответ отправлен: 08.08.2002, 11:03
Отправитель: Igoryk


Отвечает Dark_Lord

Добрый день, DAS!
Не ах, а ah, в неё задаётся номер функции прерывания 21h, которое вызывается позже, если бы её не было откуда ба прерывание узнало что ему делать с заданой строкой!

Ответ отправлен: 07.08.2002, 23:55
Отправитель: Dark_Lord


Отвечает ASMодей

Приветствую Вас, DAS!
Отвечаю по порядку:
1. Почему AX.
Во-первых не AX, а только AH. Во-вторых именно в AH
передается номер функции, которую будет выполнять
прерывание INT 21h.
2. Почему 9.
Функция с номером 09h как раз и отвечает за вывод
строки символов (адрес которой находится в регистрах
DS:DX) на экран.


Ответ отправлен: 08.08.2002, 10:30
Отправитель: ASMодей


Отвечает Shal

Доброе время суток, DAS!
Именно эти три строки (6, 7 и 8) предназначены для вывода сообщения на экрн. Это стандарт. Ну так сдеално...Не бери лишнего в голову...


Ответ отправлен: 09.08.2002, 16:53
Отправитель: Shal


Отвечает LIFO

Приветствую Вас, DAS!
Это функция прерывания 21h. Это досовское прерываение, имеющее множество функций ( работа с файлами, вывод строки и т.п. )Так вот чтобы вывести на экран ASCII строку( заканчивающуюся символом $) , надо вызвать 21 прерывание , в регистр надо поместить 9.

Ответ отправлен: 07.08.2002, 21:31
Отправитель: LIFO


Отвечает kvINT

Доброе время суток, DAS!
Здесь мы обращаемся к средствам DOS. А именно к 9-й функции 21-го прерывания (которое и позволяет обратиться к средствам DOS). Прерывание мы вызываем посредством int21, при этом в ah должен находиться номер функции этого прерывания (их очень много, этих функций).

Ответ отправлен: 08.08.2002, 20:32
Отправитель: kvINT


Отвечает baldr

Здравствуйте, DAS!
В процессорах Intel и им подобных принято при вызове какого-либо прерывания номер функции
помещать в регистр ax. Обработчик этого прерывания смотрит этот регистр и вызывает саму эту
функцию. Он знает как... 9 - это номер функции вывода строки на экран.


Ответ отправлен: 09.08.2002, 01:31
Отправитель: baldr



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (41)
C / C++ (29)
Perl (13)
Delphi (18)
Pascal (33)
Basic / VBA (11)
Java / JavaScript (12)
PHP (10)
MySQL / MSSQL (10)
Пользователю
Windows 95/98/Me (47)
Windows NT/2000/XP (31)
"Железо" (36)
Поиск информации (19)
Администратору
Windows NT/2000/XP (17)
Linux / Unix (11)
Юристу
Гражданское право (5)
Семейное право (3)
Трудовое право (4)
КоАП (2)

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




be number one Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное