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

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


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

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

Выпуск № 464
от 11.01.2003, 03:30

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


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

Ayl
Статус: Профессиональный
Общий рейтинг: 117.32
[Подробней >>]
Igoryk
Статус: Доверительный
Общий рейтинг: 138.27
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 139.55
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
 
keleb-glin
Статус: Опытный
Общий рейтинг: 112.54
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 127.37
URL: моя рассылка по Protected Mode
[Подробней >>]
Blad
Статус: Начальный
Общий рейтинг: 103.6
[Подробней >>]
 
Eugene
Статус: Опытный
Общий рейтинг: 108.88
URL: мощный файловый архив
[Подробней >>]
kvINT
Статус: Профессиональный
Общий рейтинг: 106.01
Телефон: (34316)2-31-45
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.01
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 113.9
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Александр
Статус: Доверительный
Общий рейтинг: 107.76
[Подробней >>]
LIFO
Статус: Профессиональный
Общий рейтинг: 119.37
URL: наш сайт
Телефон: 8 01710 24758
[Подробней >>]
 
Traish
Статус: Опытный
Общий рейтинг: 125.66
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 112.91
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 146.89
[Подробней >>]


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

Вопрос № 2347. Здравствуйте, уважаемые эксперты ! :))) 1.Кому не тяжело, просьбишка глянуть Приложение, в связи ... (ответов: 2)
Вопрос № 2348. Всем Привет! Всех с прошедшими, текущими и будущими праздниками! :) 1) Есть у кого-нибудь инфа, су... (ответов: 2)
Вопрос № 2349. Broken Sword! 1.Вышлите плз все рисунки из всех выпусков рассылки "Процессор INTEL в защищенном... (ответов: 1)
Вопрос № 2350. Здравствуйте уважаемые эксперты! Неподскажите, где можно скачать всю книгу в электронном виде Зубков... (ответов: 2)
Вопрос № 2351. Здравствуйте! В вопросе № 2350 я спрашивал где можно скачать "ВСЮ" книгу в электронном вид... (ответов: 2)
Вопрос № 2352. Доброе время суток !! Portnov . Broken Sword. baldr . Dark_Lord. Gibbel. Ayl. Igoryk. ... (ответов: 4)
Вопрос № 2353. Вопрос не в тему... но все же электроника:) Сущ. ли такой определитель номера (включается до телефон... (ответов: 5)
Вопрос № 2354. Подскажите пожулуйста где можно скачать архив рассылки "Ассемблер это просто...."... если,... (ответов: 4)
Вопрос № 2355. Доброе время суток эксперты. Каким стандартом было закреплено мнемоническое обозначение команд?... (ответов: 5)
Вопрос № 2356. Здравствуйте ув. эксперты Подскажите пожалуйста: 1. Есть ли в GDI какая-нибудь ф-я, с помощью котор... (ответов: 5)
Вопрос № 2357. Здравствуйте уважаемые Эксперты! Я занялся оптимизацией и защитой своего кода. Скажу сразу, что до э... (ответов: 6)
Вопрос № 2358. Здравствуйте уважаемые Эксперты! Я не претендую на BS> “нужно определить ВСЕ возможные и невоз... (ответов: 2)
Вопрос № 2359. Здравствуйте уважаемые эксперты. Не могу загрузить в SoftIce 4.0 com программку. Загружал через Sym... (ответов: 2)
Вопрос № 2360. Приветствую уважаемых Экспертов. Дело такое: есть программа (в виде экзешника под windows) и кое-чт... (ответов: 2)

Вопросов: 14, ответов: 44


 Вопрос № 2347

Здравствуйте, уважаемые эксперты ! :)))
1.Кому не тяжело, просьбишка глянуть Приложение, в связи с которым и вопрос. По ( моей :))) ) идее, данная программка должна бы перехватывать Ctrl-Break aka Ctrl-C, которое вроде как висит на int 23h, но она этого делать не желает, а TD засылает управление после первого вызова int 16h х.з. куда...
Хотя в DOS'е прога честно ждет двух нажатий... А в чём прикол данной ситуации?
2.Зубков на стр.255 своей книги пишет : Ф-я DOS 34h - определить адрес флага занятости DOS...
Далее - Если флаг занятости не 0 - можно использовать только ф-ии DOS 01h-0Ch...
Далее(конец абзаца) - Все ф-ии ввода символа с ожиданием вызывают внутри себя int 28h (при этом флаг занятости = 1)..., так что если установить обработчик int 28h, и него можго вызывать все ф-ии DOS кроме(!?) 01h-0Ch...
И как его следует понимать ??? Да и как можно использовать ф-ю DOS(!) 34h, если DOS занят ???
Большое спасибо всем экспертам, кто хотя бы дочитал до сего предложения :))) Хотя материального выражения эта благодарность пока не имеет, но пусть она хотя бы погреет душу зимой :)))
HNY (a la Happy New Year)
S/


Приложение:


Вопрос отправлен: 06.01.2003, 07:05
Отправитель: Sslash (assem@ukr.net)

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

Отвечает Ayl

Здравствуйте, Sslash!
Во-первых, мне не нравится вот этот кусок:
mov ax, 2523h
mov dx, offset i23h_h + 1
int 21h
Зачем здесь +1? В результате установки таким образом обработчика прерывания ты попадаешь на команду push di, а не push ds. Но в конце pop ds выполняется, в результате ты вытаскиваешь из стека значение, которого там нет. Странно, что у тебя вообще прога как-то выполняется. Вообще-то, она должна сразу же вылетить при первом же вызове int 23h.
Во-вторых, в обработчике 23-го прерывания ты используешь регистр es, но не сохраняешь его.
В-третьих, ты выводишь строку на экран, но не сохраняешь предвдущее состояние экрана. В принципе, для данного случая это неважно (прога нерезидентная), но все-таки это не хорошо.
По поводу второго вопроса.
Прерывание 28h генерируется самим DOS'ом в момент выполнения функций 01h - 0ch. Соответственно, вызывать данные функции из прерывания 28h нельзя.
Кроме этого, еще есть специальный флаг занятости DOS (InDos). Так как его местоположение не фиксировано, то DOS содержит специальную функцию (34h) для определения адреса этого флага. Этот адрес нужно определить при запуске программы и записать в переменную. А потом просто проверять значение по сохраненному адресу для обнаружения занятости DOS.
При этом при вызове int 28h флаг InDos равен 1, но допустим вызов функций с номерами большими 0ch.
При обработке других прерываний (например, прерывание от таймера - IRQ0 или int 8h, или же ловушка int 1ch) при значении флага, равного 1, функции DOS вызывать нельзя. Если же флаг сброшен, то можно вызывать любые функции DOS.


Ответ отправлен: 08.01.2003, 11:35
Отправитель: Ayl


Отвечает Igoryk

Добрый день, Sslash!
Судя по твоей программе ты настраиваешь обработчик прерывания, затем организуешь паузу до нажатия любой клавишы и сразу снимаешь обработчки прерывания. Возможно твой обработчик не успевает обработать прерывание int 23h, поскольку это векторное прерывание DOSa. Но если тебе нужно перехватывать нажатие Ctrl+Break (Terminate Programm), то просто перенастрой двойное слово по адресу cs:0008h. Здесь расположен адрес обработчика int 23h. Просто помести сюда адрес твоей подпрограммы и все будет работать.

Ответ отправлен: 06.01.2003, 12:41
Отправитель: Igoryk


 Вопрос № 2348

Всем Привет! Всех с прошедшими, текущими и будущими праздниками! :)
1) Есть у кого-нибудь инфа, сурсы и етц. по ООП на асме?
2) Где можно легально приобрести TASM и можно ли вообще это сделать? :)



Вопрос отправлен: 06.01.2003, 10:36
Отправитель: Andrew (formatC_vt@hotbox.ru)

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

Отвечает Maverick

Доброе время суток, Andrew!
2.А зачем тебе, деньги лишние?
Он и так работает.


Ответ отправлен: 07.01.2003, 08:40
Отправитель: Maverick


Отвечает keleb-glin

Здравствуйте, Andrew!
Инфа у меня, конечно, есть, но я пока ищу нормальный хостинг, чтоб её выложить. А вот TASM легально можно приобрести теперь только вместе с Delphi, CBuilder и т.д., т.к. как на отдельный продукт дядя Борман на него забил: его отдельная последняя версия даже SSE ( или SSE2 ? ), по-моему, не поддерживает, а та, что с Дельфёй и Си - вполне нормальная.

Ответ отправлен: 06.01.2003, 22:54
Отправитель: keleb-glin


 Вопрос № 2349

Broken Sword!
1.Вышлите плз все рисунки из всех выпусков рассылки "Процессор INTEL в
защищенном режиме".
2. Как согласуется с номерами 5 и 7 следующая выдержка из электронного учебника нашего универа:
----start---
Виртуальный адрес при страничном распределении может быть представлен в виде пары (p, s), где p - номер виртуальной страницы процесса (нумерация страниц начинается с 0), а s - смещение в пределах виртуальной страницы. Учитывая, что размер страницы равен 2 в степени к, смещение s может быть получено простым отделением k младших разрядов в двоичной записи виртуального адреса.
Оставшиеся старшие разряды представляют собой двоичную запись номера страницы p.
При каждом обращении к оперативной памяти аппаратными средствами выполняются следующие действия:
1.на основании начального адреса таблицы страниц
(содержимое регистра адреса таблицы страниц), номера виртуальной страницы
(старшие разряды виртуального адреса) и длины записи в таблице страниц
(системная константа) определяется адрес нужной записи в таблице,
2.из этой записи извлекается номер физической страницы,
3.к номеру физической страницы присоединяется смещение
(младшие разряды виртуального адреса).
----end----
Спасибо



Вопрос отправлен: 06.01.2003, 11:04
Отправитель: Евгений (other@mail.kz)

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

Отвечает Broken Sword

Здравствуйте, Евгений!
см. почту

Ответ отправлен: 06.01.2003, 14:35
Отправитель: Broken Sword


 Вопрос № 2350

Здравствуйте уважаемые эксперты!
Неподскажите, где можно скачать всю книгу в электронном виде Зубкова - "Ассемблеp для Dos, Windows u Unix"?



Вопрос отправлен: 06.01.2003, 11:57
Отправитель: nizar

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

Отвечает Igoryk

Добрый день, nizar!
Не буду оригиналом: НИГДЕ.
Скорее всего тебе так ответили все эксперты. А вообще кто-то говорил что на каком-то сайте разместит...

Ответ отправлен: 06.01.2003, 12:41
Отправитель: Igoryk


Отвечает Blad

Доброе время суток, nizar!
Доброе время суток, nizar!
Сколько раз можно повторять - нет такой (еще?)

Ответ отправлен: 06.01.2003, 18:21
Отправитель: Blad


 Вопрос № 2351

Здравствуйте!
В вопросе № 2350 я спрашивал где можно скачать "ВСЮ" книгу в электронном виде Зубкова - "Ассемблеp для Dos, Windows u Unix". Так как на http://netlib.wallst.ru написали, что выложут и вышлют желающим к концу января всю книгу. Но так как пока не конец января :-) я решил спросить. Кстати там есть ещё несколько интересных книг. Может вы знаете ещё сайты с подобной тематикой?



Вопрос отправлен: 06.01.2003, 18:57
Отправитель: nizar

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

Отвечает Maverick

Приветствую Вас, nizar!
Всмысле с какой тематикой?
Книги по асму в эл. виде?
В поисковике ищешь эл. библиотеки, а там все по разделам.


Ответ отправлен: 07.01.2003, 08:40
Отправитель: Maverick


Отвечает Eugene

Здравствуйте, nizar!
Большой сайт по книгам вообще http://lib.ru
Но по программированию там есть только пара книжек, и те по С++

Ответ отправлен: 07.01.2003, 17:05
Отправитель: Eugene


 Вопрос № 2352

Доброе время суток !! Portnov . Broken Sword. baldr . Dark_Lord. Gibbel. Ayl. Igoryk. LIFO. Dron.
kvINT. Топор. Shal. Sensey. ASMодей. nix. Pablo. DieMFs . freeseacher. Spike . masquer.
Predator. Guess Who. Vint by Shz. Александр. Alex. BMR. Артём Шегеда. vitya. Blackeye. DrGenius. Guess Who. Zloy. kostik. Калашников О.А. Beeblebrox. LAO.
AnSim. VicSimon. AnSim. igorash.
ASSEMBLER ето великая штука. Есть агромное желание Время и большой интерес познать то что честно дается с большим трудом. Чтобы преодолеть етот баръер у меня к Вам тут такая просьба: ПРОШУ ПРИНЯТЬ МЕНЯ В ВАШ ПОЛК (сыном полка);
И буду очень рад вашим письмам(мыло) с уроками и небольших поучительных исходниках.Оговорю сразу что, что такое как допустим двоичный код или структура машинной команды мне знакомо на уровне intel Z80(spectrum).А также сегментация и вообще архиктетура Pentium.
1 какой редактор посоветуете?. 2как рисовать?. 3 Что такое macro? 4 как вставить рисунок из другого файла и многое другое Самое главное что такое компилятор и как с ним работать?
Не сочтите меня наглецом за мою просьбу. Я живу в 120 км от центра, где нет ни почты ни INETA, глухомань. Только раз в неделю приезжаю, если погода позволяет, к другу который
дал мне возможность связатся с внешним миром, но я надеюсь и с Вами. Заранее благодарен. MAHG@kholmsk.sakhalin.ru

С Н О В Ы М Г О Д О М 2 0 0 3 !!!







Вопрос отправлен: 06.01.2003, 19:06
Отправитель: mang

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

Отвечает kvINT

Здравствуйте, mang!
Посмотри в ящике. Это с сайта wasm.ru, но уже очищено от шелухи (реклами и пр.)
Я, кстати, три года прожил на Сахалине, в Тым. р-не, и в Холмске 1 раз был. Тоннели у вас там замечательные.

Ответ отправлен: 06.01.2003, 23:04
Отправитель: kvINT


Отвечает Maverick

Доброе время суток, mang!
Можешь писать на Maverick@nightmail.ru
Помогу с доками.


Ответ отправлен: 07.01.2003, 08:42
Отправитель: Maverick


Отвечает Igoryk

Приветствую Вас, mang!
Могу помочь всегда.
1. DOSовский Editor (edit) или Блокнот.
2. Если ты имеешь ввиду вывод на экран, то существует очень много способов от прерываний BIOSа до низкоуровневого изменения цвета пиксела.
3. macro - это возможность вставлять в текст программы макросы. Т.е. допустим в каком-то файле, который ты подключаешь с помощью include, есть макрос, то просто написав в своей программе имя макроса, твой компилятор вставит этот макрос в текст программы. Очень удобно, когда делаешь большую программу.
4. --
Компилятор-это программа, с помощью которой текст понятный человеку проверяется на наличие ошибок и переводится в машинные коды, чем обеспеивается возможность запуска программы.

Ответ отправлен: 07.01.2003, 13:09
Отправитель: Igoryk


Отвечает Bob Johnson

Доброе время суток, mang!
Ну вот... а меня забыл... :-(
И Z-80 вовсе не от Intel'a... А от ZILOG.
1. FAR, DN, и т.д. (вот как раз сегодня на свою страницу вопрос об этом выкладывал - сходи туда, посмотри FAQ, может что-то найдешь: bobjohnson.nm.ru)
2. В любом графическом редакторе.
3. директива определения макросов в асме.
4. половину вопроса не понял, как работать с компилятором - тоже см. на странице.
P.S. Каким ассемблером на спектруме пользовался и что писал?


Ответ отправлен: 08.01.2003, 00:29
Отправитель: Bob Johnson


 Вопрос № 2353

Вопрос не в тему... но все же электроника:)
Сущ. ли такой определитель номера (включается до телефона), чтобы его не было слышно звонящему...
ну вы думаю знаете, простые слышно по изменению звука гудков...



Вопрос отправлен: 06.01.2003, 19:54
Отправитель: Ландграф Павел

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

Отвечает Broken Sword

Доброе время суток, Ландграф Павел!
кхм... я тоже когда то очень страдал всякими АОН-ами.
Вообще то даже если в точности подобрать тональность гудков, отсылаемых звонящему после определения его номера, то все равно - в случае неопределения номера звонящий узнает о присутствии АОН-а по двум-трем сигналам посыла запроса номера (425Гц) вашего АОН-а.
Т.е. в принципе, если есть уверенность, что АОН 100% определит номер, то теоретически можно скрыть его присутствие путем имитации тональности гудков, отсылаемых вашим АОН-ом, но если номер по каким-то причинам не определиться, то звонящий об этом сразу догадается по быстро чередующимся коротким гудочкам (их количество зависит от кол-ва запросов посылаемых вашим АОН-ом на АТС).

Ответ отправлен: 06.01.2003, 22:46
Отправитель: Broken Sword


Отвечает baldr

Здравствуйте, Ландграф Павел!
Понимаешь, в чем фишка... В, например, Америке гудок именно такой высоты, как в АОНе.
А все, практически, АОНы сейчас делаются на основе западных. То есть, если взять обычный
такой "высокий" АОН и впаять схемку, понижающую тон, то ты можешь его и не отличить. Однако,
когда происходит взятие трубки АОНом, все равно будет щелчок, который заметить легко.


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


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

Приветствую Вас, Ландграф Павел!
Не-а. Хотя если у тебя цифровая АТС, то она может быть поддерживает западный стандарт определителя номера, так называемый Caller ID. В отличие от старых российских АТС такие станции передают номер звонящего вместе с сигналом вызова. Практически все иностранные аппараты с определителем понимают этот стандарт без всяческих ухищрений, а родной российский только в результате апгрейда микропрограммы. Микропрограмму же обычно дополняют уже в России у официального дилера, поэтому телефоны с российским определителем зачастую отличаются некоторой глюкавостью.


Ответ отправлен: 07.01.2003, 20:50
Отправитель: Александр


Отвечает keleb-glin

Приветствую Вас, Ландграф Павел!
Да, существует. Называется Blue Box, вот только где найти его не знаю. Про него писали в "Спец Хакере" за 07.2002 ( про мобильную связь ) - рекомендую найти и почитать.


Ответ отправлен: 06.01.2003, 22:48
Отправитель: keleb-glin


Отвечает Bob Johnson

Добрый день, Ландграф Павел!
Да, существует! Но только на ISDN линиях...


Ответ отправлен: 08.01.2003, 00:29
Отправитель: Bob Johnson


 Вопрос № 2354

Подскажите пожулуйста где можно скачать архив рассылки "Ассемблер это просто...."... если, конечно, его вообще можно где-то скачать...
спасибо...
зы. Только пожалуйста не пишите что-то вроде "заколебало уже в сотый раз на один и тот же вопрос отвечать... Пойди сам найди..."



Вопрос отправлен: 06.01.2003, 20:26
Отправитель: hklhjkl

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

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

Приветствую Вас, hklhjkl!
http://www.subscribe.ru/archive/comp.prog.assembler


Ответ отправлен: 07.01.2003, 20:53
Отправитель: Александр


Отвечает Maverick

Приветствую Вас, hklhjkl!
Попроси Bob Jonsona, чтоб он выложил их на своем сайте.


Ответ отправлен: 07.01.2003, 08:42
Отправитель: Maverick


Отвечает LIFO

Здравствуйте, hklhjkl!
Subscribe.ru (там архив есть)

Ответ отправлен: 06.01.2003, 20:51
Отправитель: LIFO


Отвечает Igoryk

Доброе время суток, hklhjkl!
На архиве Subscribe и на Kalashnikoff.ru

Ответ отправлен: 07.01.2003, 13:09
Отправитель: Igoryk


 Вопрос № 2355

Доброе время суток эксперты.
Каким стандартом было закреплено мнемоническое обозначение
команд?



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

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

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

Доброе время суток, kuper!
Какой-такой павлин-мавлин, мы думаем. Без стандартов. Просто фирма интел дала названия командам, когда разрабатывала процессор. С тех пор так и повелось. Если ты посмотришь на систему команд i8051, например, то долго будешь искать знакомые буковки. Так что благодарить за кртакость мы должны именно фирму интел и именно тех кто разрабатывал 8086 и никого больше.
P.S. А тебя случаем не Джеймс Фенимор зовут???


Ответ отправлен: 07.01.2003, 20:53
Отправитель: Александр


Отвечает baldr

Доброе время суток, kuper!
А каких именно команд? Понимаешь, одинаково они выглядят только в hex-виде...
А в FASM, TASM, NASM и пр. мнемокоды очень сильно различаются. Так что единого стандарта нет.
Как фирме, производящей компиляторы кажется удобным, так и называют. Более того - даже
синтаксис ассемблера могут полностью сменить!


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


Отвечает Broken Sword

Здравствуйте, kuper!
никаким. Инструкция процессора IA-32 должна удовлетворять только одному условию (хотя и это не обязательно):
она должна иметь следующий формат
метка: мнемоническое_обозначение аргумент1, аргумент2, аргумент3
все остальное - по желанию компиллятора. Так, в компиляторах типа TASM приемником всегда является первый аргумент, а в ГНУ-шных - второй. Мнемонические обозначения придумала сама Intel (как и коды командам), хотя для придумывания кодов уже не такой простор развернуться как для мнемоники (это к тому, что некоторые опкоды и нельзя было реализовать по другому, пошли бы нарушения на уровне логических элементов)

Ответ отправлен: 06.01.2003, 22:46
Отправитель: Broken Sword


Отвечает Bob Johnson

Здравствуйте, kuper!
Тебе что RFC или IEEE нужен? Не знаю.
Оно берется от сокращенного английского названия команды. И на 80х86 еще вполне ничего (вот на 8080...). Например:
SBB - SuBstraction with Borrow (вычитание с заемом).


Ответ отправлен: 08.01.2003, 00:29
Отправитель: Bob Johnson


Отвечает Traish

Доброе время суток, kuper!
Не думаю, что здесь есть какой-нибудь стандарт, просто сокращенные названия.


Ответ отправлен: 09.01.2003, 08:57
Отправитель: Traish


 Вопрос № 2356

Здравствуйте ув. эксперты
Подскажите пожалуйста:
1. Есть ли в GDI какая-нибудь ф-я, с помощью которой, зная Handle окна, можно скопировать изображение и позже отобразить его в том же окне?
2. Как реализовать задержку по времени, так чтобы она на всех компах была примерно одинакова?



Вопрос отправлен: 06.01.2003, 21:56
Отправитель: Frolik (FVK@km.ru)

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

Отвечает Maverick

Доброе время суток, Frolik!
2.По таймеру.


Ответ отправлен: 07.01.2003, 08:42
Отправитель: Maverick


Отвечает keleb-glin

Доброе время суток, Frolik!
Зная Хендл окна можно вызвать функцию
GetDC ( HDC GetDC ( hWnd Wnd ) ) и получить контекст устройства. Используя его, можно рисовать на поверхности и получать её изображение, т.е. всё, что ты перечислил. Какие функции это делают - не помню ( давно не пользовался ), поэтому смотри справочник по API - если ты занимаешься кодингом, он ОБЯЗАН у тебя быть .


Ответ отправлен: 06.01.2003, 23:03
Отправитель: keleb-glin


Отвечает Igoryk

Добрый день, Frolik!
Задержка во времени:
call GetTickCount
mov ebx, eax
Begin:
call GetTickCount
sub ebx, eax
cmp eax, время_в_мс
jne Begin


Ответ отправлен: 07.01.2003, 13:09
Отправитель: Igoryk


Отвечает St

Привет, Frolik!
1) Наверное так:
вызвать GetDC (GetDCEx) с хэндлом окна и получить его DC.
создать DC в памяти с помощью CreateCompatibleDC и хендла экранного DC.
создать в этом DC в памяти битмап (CreateCompatibleBitmap) и выбрать его (SelectObject).
скопировать изображение с экрана в память функцией BitBlt.
если нужно вернуть изображение в окно то в BitBlt нужно поменять кто source а кто destination.
2) Я так понимаю что под Windows? Тогда придется воспользоваться функцией Sleep - она останавливает текущий thread на указанное число миллисекунд (на не очень быстрых машинах может не давать точности до одной миллисекунды, но думаю несколько миллисекунд будут). Это что касается задержки (то есть поток (или весь данный процесс если нет многопотоковости) просто ничего не будет делать указанное количество времени, передав свое процессорное время другим программам). если же нужен таймер - то есть чтобы некий код вызывался через определенное время, но при этом программа работала, то можно воспользоваться виндовсовским таймером (не слишком точен под Win9x), или создать свой в отдельном потоке и посылать из него application-defined message.
St

Ответ отправлен: 07.01.2003, 13:24
Отправитель: St


Отвечает Bob Johnson

Доброе время суток, Frolik!
1. BitBlt на DeviceContext в памяти (сначала должен его создать сам).
2. С использованием GetTickCount + Sleep, например.


Ответ отправлен: 08.01.2003, 00:29
Отправитель: Bob Johnson


 Вопрос № 2357

Здравствуйте уважаемые Эксперты!
Я занялся оптимизацией и защитой своего кода. Скажу сразу, что до этого момента мне на защиту было всегда наплевать. Но времена меняются, однако. И у меня сразу возникло море вопросов. Начну с вопросов под ДОС. Хотя особенно интересует мастдай. Но все по порядку.
Я, КОНЕЧНО, ПОНИМАЮ, ЧТО ЕСЛИ БУДЕТ ЧТО ЛОМАТЬ, ТО ОБЯЗАТЕЛЬНО ВЗЛОМАЮТ. Но грех выставлять свой код на блюдце для всех!
1. Например я хочу защитить свой код от отладчиков уровня приложений (или как он там называется). Способов море некоторые я даже знаю. Хотя есть еще куча которых я не знаю. Например TD можно обломить переполнением стека так:
xor ax,ax
mov es,ax
mov [save_ss],ss
mov [save_sp],sp
mov ss,ax
Но кто мешает Злобному Хакеру вместо mov ss,ax натыкать nop-ов в том же TD?
Сколько б я раз не использовал этот код, все тот же Злобный Хакер легко может подпатчить его.
Есть куча способов обнаружить отладчики и даже сам СофтАйс, но я еще раз повторюсь, кто мешает заменить деструктивный код идущий после обнаружения отладчика на просто nop-ы?
Нутром чуствую, что не достаточно обламывать дебагеры только в начале проги. Было бы хорошо поместить сей код внутри основного алгоритма. Но тут ведь упирается все в оптимизацию по производительности.
2. Например я зашифрую основную часть кода. Но ведь участок занимающийся разшифровкой все равно открыт для посторонних глаз.
У меня аж руки опускаются. Не, я не про то, что меня интересуют всякие там копирайты. Просто иногда хочется немного усложнить жизнь исследователям кода. Живой пример понадобился генератор случайных чисел, взял хе-хе-хе, первый попавшийся Life.com (кстати такой тормозной, что ого-го и аж на 256 байт; я в былые времена на С шустрее писал, или на Паскале). Он там вначале забивает ‘мусором’ экран. Ну так за 30 сек. нашел и стырил нужный кусок кода. Аж обидно стало.



Вопрос отправлен: 06.01.2003, 22:37
Отправитель: Бадян (sba@litech.net)

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

Отвечает keleb-glin

Доброе время суток, Бадян!
Я не думаю, что можно реально защитить код от связки Дизассемблер+Дебаггер+Крекер ( не печенье, а человек ). От дизасма защищает шифровка и упаковка. От дебаггера ( без человека - например, при псевдовыполнении антивирусом ) также иногда помогают вызовы прерываний 1 или 3, которые юзаются отладчиком. А от человека защищает очень запутанный код. Лучше всего - написанный на языке высокого уровня ( в идеале - на VB, так как там постоянные вызовы vbvmxx.dll. Если у тебя будет жуткий код, в один прекрасный момент хакер может просто забить на всё и уехать к бабушке в деревню.


Ответ отправлен: 06.01.2003, 23:12
Отправитель: keleb-glin


Отвечает Maverick

Добрый день, Бадян!
Да способов море, лучше тебе почитать соответствующую литературу.
После антиотладочнух триков, можешь сверять CRC своей проги или ее участков, и если оно не такое, то разносит комп :)
Или используй полиморфный движок, чтоб свою прогу заполиморфить, комбинируй разные способы.
P.S.Будет надо, сломают.


Ответ отправлен: 07.01.2003, 08:42
Отправитель: Maverick


Отвечает Broken Sword

Приветствую Вас, Бадян!
не мучайся - запакуй свою прогу последним ASProtect-ом. Кстати, до сих пор нет алгоритма, по которому можно сломать любую прогу запакованную ASProtect-ом. На худой конец - подойдет TeLock или Armadill-а. Остальное - отстой.
Думаю, в мире найдется не так много людей, способных взломать прогу, пакованную ASProtect-ом. (да, смотри не перепутай с ASPack-ом, второе - фуфло).
И еще - если ты постгнешь все тонкости и премудрости структурной обработки исключений, то взломать такую прогу сможет только тот, кто разбирается в этом не хуже тебя, а таких людей (видящих SEH насквозь), поверь, ОЧЕНЬ немного...

Ответ отправлен: 06.01.2003, 22:56
Отправитель: Broken Sword


Отвечает masquer

Приветствую Вас, Бадян!
1. TD обломать, даже стараться не надо, он даже самомодифицирующийся код не поймет, короче злобные хакеры не используют TD (разве что начинающие, но эти самые злобные).
Дальше хоть способов обнаружения отладчиков - море, но способов обхода этих способов - тоже море. Не стоит бороться с отладчиком.
2. Если хитро и запутанно зашифровать, то это обломит 90%. Ну, а оставшихся 10% уже ничем не удивишь...

Ответ отправлен: 07.01.2003, 14:38
Отправитель: masquer


Отвечает Igoryk

Здравствуйте, Бадян!
Да, проблема острая! Я здесь с тобой согласен. Против лома как говорится нет приема. Нормальную защиту можно поставить только с более низких позиций (ОС). Например DOS всегда проверяет CRC в файле. И попробуй взломай... Обидно конечно, что почти любой код шифровки паролей можно изменить на расшифровку. Есть конечно выход - запутать весь код, но кому это нужно? Вообще вопрос, который поднял он будет решаться вечно. Как гонка вооруджений...

Ответ отправлен: 07.01.2003, 21:16
Отправитель: Igoryk


Отвечает Bob Johnson

Добрый день, Бадян!
У тебя правильный ход мысли - чтобы никто ничего не мог в твоей программе изменить, необходимо усложнить декодирующий цикл так, чтобы в нем было сложно разобраться, чтобы он выполнялся бы один раз, но занимал бы столько инструкций, чтобы ни один человек не захотел его транслировать. Кроме того, декодеры обычно вложенные - т.е. один декодирует второй, тот - третий и т.д. Если все это усложнить, то проверку на отладчик можно поставить в конце, до куда обычный хакер (не кулхацкер) пошагово не дойдет, а просто запустит на выполнение. В общем это целое искусство :-) Я признаюсь, что никогда этим не занимался (не кодировал), хотя декодировать редко но приходилось.


Ответ отправлен: 08.01.2003, 00:29
Отправитель: Bob Johnson


 Вопрос № 2358

Здравствуйте уважаемые Эксперты!
Я не претендую на BS> “нужно определить ВСЕ возможные и невозможные правила” для компо по Life. Но кое-что придумал.
1. ОС - чистый ДОС, безо всяких там наворотов
2. Real Mode.
3. Видеорежим 13h (320x200x256). Я понимаю что для уменьшения размера всем хочется погрешить текстовым режимом, но во первых там не на что будет смотреть из-за несколько малых размеров поля, а во вторых – задолбали уже проги, изначально предназначенные для граф. режимов, но реализованные для текстового режима.
4. Интересует только голый размер кода. (Тоесть вариант когда кто-нить не поставит в конце int 20h и будет говорить что его код на 2 байта короче.) Поэтому предлагаю рассматривать только голый размер кода. Чуствую что в этом пункте море подводных камней, поэтому его можно заменить.
5. Нужно реализовать самый обычный монохромный Life на незацикленном поле (например 0 цвет - нет точки, 15 - есть точка). Тоесть все что выходит за размеры 320x200 обрезается.
6. Начальная комбинация точек размещена в видеопамяти, и размер кода, размещающего эту последовательность в видеопамяти есно не учитывается.
2 Broken Sword:
Насчет 64 байта - это мне в голове не укладывается. Пока не увижу не поверю.
А вот про 4,5 такта. Это уже как сказать. Мой алгоритм несколько оригинален (но думаю что до него не только я додумался). Так вот скорость работы этого алгоритма НАПРЯМУЮ зависит от количества заполненых точек на экране. Для одного-единственного планера на поле 320х200 она почти молниеносна. Для того же поля, но хаотически заполненого, она несколько меньше, но всеравно в КУЧУ раз больше чем у обычного алгоритма. Поэтому я даже затрудняюсь чтобы сказать сколько у меня тактов на точку.
ЗЫ. Еще раз вспомнил про 64 байта. Неужто кто-то додумался как заменить окончательную проверку на состояние точки в n+1 поколении (У меня эта штука занимает львиную долю
). Это когда уже посчитано, сколько у точки соседей. Немного раскрою карты - у меня подсчет количества соседей в корне ОТЛИЧАЕТСЯ от обычного подсчета. Из-за этого достигается колосальная скорость.

Вроде все.
Благодарю за внимание.



Вопрос отправлен: 06.01.2003, 22:47
Отправитель: Бадян (sba@litech.net)

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

Отвечает Broken Sword

Добрый день, Бадян!
Насчет 4 пункта - в серьезных компо подобных вопросов даже не возникает (прога должна корректно завершаться и возвращаться в ДОС, а сделаешь ты это по ret, по int 20h или по 4Ch ф-ции - это уже твои проблемы)
Насчет 64 байт - Зубков утверждает, что в 1997 году, когда проводился n-ный конкурс "...на самую короткую и на самую быструю программу, выполняющую в точности то же, что и наш пример, - заполнение экрана случайными точками, их эволющия и выход по нажатию любой клавиши. Самой короткой тогда оказалась программа размером в 72 байта, которая с тех пор была усовершенстваована до 64 байт (ее скорость 52 такта на точку), а самая быстрая из 16 битных программ тратит на каждую точку в среднем всего 6 тактов процессора Pentium и имеет размер 689 байт. В ней состояния ячеек описываются отдельными битами массива, а для их обработки используются команды логических операций над целыми словами, поэтому одна команда обслуживает сразу 16 точек. Применение 32-битных команд с тем же алгоритмом позволяет ускорить программу до 4,5 такта на точку".
Вот таково положение дел (не факт, что ее кто-то мог усовершенствовать еще больше). Кстати, в том же самом Зубкове приведен вариант life в виде exe-модуля, потому что "... применяется массив, близкий по размерам к сегменту, и если разместить его в одном сегменте с COM-программой, стек, растущий от самых старших адресов, может затереть область данных". Скорость работы - 200 тактов на точку.
В приложениях к книге я обнаружил COM-версию - 141 байт.

Ответ отправлен: 07.01.2003, 13:03
Отправитель: Broken Sword


Отвечает Igoryk

Добрый день, Бадян!
Я не согласен с четвертым пунктом. Лучше узнавать размер всего кода. К твоим пунктам можно добавить запрещение использовать 32-битные регистры.
А где проводить будем?

Ответ отправлен: 07.01.2003, 21:16
Отправитель: Igoryk


 Вопрос № 2359

Здравствуйте уважаемые эксперты.
Не могу загрузить в SoftIce 4.0 com программку.
Загружал через SymvolLoader выдается сообщение
не поддерживается модуль такого стандарта или т.п.
Так же немогу загрузить и exe модуль.
Хотя файл winice.dat ,был настроен.
SoftIce работает нормально, BPX на API функции
выполняется. Подскажите плиз в чем дело?



Вопрос отправлен: 06.01.2003, 23:11
Отправитель: Yury (ch_y@mail.ru)

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

Отвечает Maverick

Здравствуйте, Yury!
Есть там прога такая Dldr
dldr имя файла.com


Ответ отправлен: 07.01.2003, 08:42
Отправитель: Maverick


Отвечает Broken Sword

Здравствуйте, Yury!
Дело в том, что SoftICE через Symbol Loader работает только с модулями, содержащими отладочную информацию. Как же втулить в модуль отладочную инфу? На этапе компилляции, больше никак. В COM-файл это нельзя сделать впринципе, а вот при компилляции exe, dll, vxd - модулей это более чем реально, важно знать, с какими параметрами компиллировать (у каждого компиллятора свои). Ну вот например в Borland C++ 4.5 и 5.0 при компилляции нужно использовать ключ /v, а в TASM-е 4.1 - ассемблировать с ключом /zi, а компоновать с /v, и т.д., у меня есть эта инфа практически для всех компилляторов. Далее. Файл winice.dat здесь вообще не при чем. А насчет того, как отлаживать COM-файл - можешь использовать метод int3 intrusion (т.е. первой инструкцией в нем лепишь int 3, а в отладчике задаешь set int3here on. Даю руку на отсечение, что SI брякнется.

Ответ отправлен: 07.01.2003, 12:44
Отправитель: Broken Sword


 Вопрос № 2360

Приветствую уважаемых Экспертов.
Дело такое: есть программа (в виде экзешника под windows) и кое-что в ней не нравиться. Изучив ее при помощи softice и ida выясняю, что для ее модернизации необходимо написать небольшую процедурку и вставить в этот самый экзешник.
Реализация вызова этой процедуры вопросов не вызывает, а вот каким образом впихнуть ее в exe файл, чтобы она нормально вызывалась - это для меня вопрос.
В общем-то, я знаю, что структура экзешника для windows довольно сложна, поэтому, возможно, простого решение этого вопроса нет. Очевидно надо менять не одну запись в заголовке и кроме того не уверен, что можно вставлять процедуру непосредственно в конец файла.
Но тем не менее, если есть время напишите как всё это делается.
Вообще, желание не просто изменить jne на jmp, а именно добавить свою функцию в готовый модуль возникает очень часто (и я думаю не только у меня).
Заранее спасибо.



Вопрос отправлен: 07.01.2003, 02:46
Отправитель: Студент

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

Отвечает masquer

Доброе время суток, Студент!
Вот буквально 2 недели назад я популярно рассказывал что и как нужно сделать. Вкратце - изучай формат РЕ, не такой уж он и сложный. Если что спрашивай.
Уже можно деньги брать за это :)

Ответ отправлен: 07.01.2003, 14:42
Отправитель: masquer


Отвечает baldr

Здравствуйте, Студент!
У меня это желание бывает очень часто... :) Но вставкой процедуры - ты прав - дело
не ограничится. Я в таких случаях или ищу замену, или пользуюсь этим, или уж пишу свою...


Ответ отправлен: 07.01.2003, 23:29
Отправитель: 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 (38)
C / C++ (28)
Perl (4)
Delphi (21)
Pascal (23)
Basic / VBA (10)
Java / JavaScript (7)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (28)
"Железо" (33)
Поиск информации (17)
Администратору
Windows NT/2000/XP (13)
Linux / Unix (15)
Юристу
Гражданское право (8)
Семейное право (5)
Трудовое право (4)
КоАП (3)

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




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

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


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

В избранное