Вопрос № 17966: Здравствуйте. У меня несколько вопросов...
1) Изучил уже 14,5 выпусков рассылки (сейчас на 15-ом сижу... хотя поверхностно проичитал уже где-то до 20-ого) , но до сих пор не знаю как на ассемблере сделать элементарную вещь, а именно элементарно з...Вопрос № 17979: Здравствуйте!
Подскажите пожалуйста, где можно найти доку по программированию железа без применения функций ДОС, Windows и других ОС (через порты ввода-вывода)...Вопрос № 17992: Всех с праздничком ;0).
А вопрос такой:
Как запустить другую программу из своей в момент загрузки WinXp, т. е. до того момента, как станут доступны API. Можно ли с помощью int 4b00h или не прокатит (попробовать сам пока не успел). Если нельзя...
Вопрос № 17966
Здравствуйте. У меня несколько вопросов...
1) Изучил уже 14,5 выпусков рассылки (сейчас на 15-ом сижу... хотя поверхностно проичитал уже где-то до 20-ого) , но до сих пор не знаю как на ассемблере сделать элементарную вещь, а именно элементарно запомнить введенную пользователем с клавиатуры строку... Вот я и интересуюсь, будет ли где-нибудь в последующих выпусках об этом???
2) После долгих мучений над Турбо Дэбагером и Коуд Вью я пиршел к выводу, что в программах типа *.сом не представляется возможным сохранить отладочную информацию (то есть, чтоб при отладке иметь дело с реальным исходным текстом программы, а не с дизасемблированной ерундой, при работе с которой волей-неволей приходится запоминать адреса всех call-ов jmp-ов и т. п. Так ли это??? (например используя tasm я прописывал: tasm.exe prog.asm /zi, tlink prog.obj /t /v - результат такой же как и без навороченных ключей...
а вот при создании .ехе файла работало....
3) Зачем тасм дописывает "левые" nop-ы??? Например при ассемблировании примера из 13 номера рассылки (вирус) тасм-ом програма имеет размер 133 байт в то время как при использовании масма -132 байта... в отладчике же появляется лишний nop...
4) Дайте, пожалуйста, кто-нибудь ссылочку на полноценный пакет tasm (в котором "все включено")... а то у меня сейчас только какой-то дифективный тасм, шедший в комплекте с урезаным Borland C++ 3.1..
5) А, собственно, занимаются ли еще Microsoft и Borland созданием масма и тасма??? А то почему-то везде, где присутствует упоминание о масме, идет речь о версии максимум 6.14... а ей уже кажись более 10 лет...
Кажется все...
Большое всем спасибо...
Отправлен: 08.03.2005, 01:29
Вопрос задал: CrazyIronToiletPaper (статус: 1-ый класс)
Всего ответов отправлено: 4
Отвечает: Стас
Здравствуйте, CrazyIronToiletPaper!
1) не знаю не читал, :) а для того чтобы ввести строку с клавиатуры нужно:
зарезервировать под неё память скажем простым db 18,20 dup(0)
и либо самому принимать коды клавы (с int16h) и укладывать их туда, либо использовать DOS ввод ah=0ah int 21h DS:DX - указавает на твой буффер.
3) используй ключ /m
Ответ отправил: Стас (статус: Практикант)
Отправлен: 08.03.2005, 02:03 Оценка за ответ: 5
Отвечает: _vt
Здравствуйте, CrazyIronToiletPaper! 1) Не помню, будет ли там об этом, но это просто. Например, читать посимвольно с помощью int 16h/ah=00h. 2) В самом коде программы - невозможно, но можно сохранить ее отдельно. Для TASM и TD это делается так: tasm /zi prog.asm tlink /v prog.obj tdstrip /s /c prog.exe
Т.е. ты создаешь exe и превращаешь его в com, отделяя отладочную инфу в файл. TD ее увидит. 3) Для выравнивания кода на какую-то границу, например. Т.е. для оптимизации
скорости, например. 4) На сайте борланда вполне может валяться, он теперь бесплатен. Если нет - exetools.com 5) Microsoft точно занимается. В составе последних Visual Studio есть ml.exe версий 7.00 и 8.00. Но это только эти файлы. Полноценный пакет - только 6.11. --
* In Gates we trust! :)
Ответ отправил: _vt (статус: Академик)
Отправлен: 08.03.2005, 02:08 Оценка за ответ: 5
Отвечает: Евгений Иванов 2. Да, отладочная информация доступна только в формате EXE. COM её не поддерживает. 3. Чтобы лишние NOP-ы исчезли, необходимо проставить многопроходовое ассемблирование. Для этого есть ключ /mЧисло, где Число - сколько делать проходов. При этом на втором и более проходах Ассемблер будет искать эти самые лишние NOP-ы, которые остаются от команд ближнего перехода, и удалять их, корректируя остальные адреса. Если писать программы определённым образом, то количество проходов
можно свести к двум.
Удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 08.03.2005, 03:22 Оценка за ответ: 5
Отвечает: Dark_Lord
Здравствуйте, CrazyIronToiletPaper!
1) Если не требуется каких-то особых проверок, то считать строку можно при помощи функции 0Ah, прерывания 21h, на входе ah=0Ah, DS:DX = адрес буфера.
2)Насколько я знаю в .com нельзя сохранить ничего кроме кода (и данных)
3)Процессоры работают с командами немного быстрее, если адрес тех выравнен до определёного числа, тасм производит эту оптимизацию при компиляции.
4)-
5)Занимаются, но как и новых версий дос, новых версий ассемблеров для дос немного. Относительно недавно вышел masm 8.1, но ориентирован он в основном на работу с Windows...
Ответ отправил: Dark_Lord (статус: Профессионал)
Отправлен: 08.03.2005, 10:09 Оценка за ответ: 5
Вопрос № 17979
Здравствуйте!
Подскажите пожалуйста, где можно найти доку по программированию железа без применения функций ДОС, Windows и других ОС (через порты ввода-вывода)
Отправлен: 08.03.2005, 13:47
Вопрос задал: bjudge (статус: Посетитель)
Всего ответов отправлено: 1
Отвечает: Стас
Здравствуйте, bjudge!
Подробнее! Какое железо конкретно ты хочешь помучать?
Вообщем процесс выглядит следующим образом:
получаешь байт (IN) из порта статуса устройства(для каждого свой)
проверяешь в этом байте биты готовности устройства к "общению"
посылашь(OUT) один или несколько байт в один или несколько (зависит от устройства) портов - команда и данные.
получаешь (IN) один или несколько байт из портов статуса и данных - результат и статус устройства.
Ну примерно так...
Ответ отправил: Стас (статус: Практикант)
Отправлен: 09.03.2005, 01:12
Вопрос № 17992
Всех с праздничком ;0).
А вопрос такой:
Как запустить другую программу из своей в момент загрузки WinXp, т. е. до того момента, как станут доступны API. Можно ли с помощью int 4b00h или не прокатит (попробовать сам пока не успел). Если нельзя, то как?
Спасибо...
P.S. WinXp SP1, masm.
Отправлен: 08.03.2005, 16:50
Вопрос задал: Дима Михайлов (статус: Посетитель)
Всего ответов отправлено: 2
Отвечает: PavPS
Здравствуйте, Дима Михайлов!
API начинают быть боступными после загрузки соответствующих либ. Сначала из HAL, ntoskrnl,ntdll и т.д. В самом нечале грузятся сервисы - можешь использовать их, потом посли логона, начинают запускаться приложения - можешь сервисом захучить их и с их помошью запустить прогу, или отредактировать быстро ключь RUNOnce реестра - никто и не заметит. А вообще не очень понятно задан вопрос, т.о. извиняй за не очень ясный ответ :)
Ответ отправил: PavPS (статус: 6-ой класс)
Отправлен: 08.03.2005, 17:07
Отвечает: _vt
Здравствуйте, Дима Михайлов! Если твоя программа является драйвером - то с помощью специальной API это делается - обращайся в Win XP DDK за справкой. int 4b00h тут совсем не причем. --
* In Gates we trust! :)
Ответ отправил: _vt (статус: Академик)
Отправлен: 09.03.2005, 11:57