Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler
Выпуск № 82
от 12.03.2005, 17:50
Администратор: | Калашников О.А. |
В номере: | Вопросов: 5, Ответов: 15 |
Вопрос № 17911: привет! где есть доки по ndis? в ya.ru.. находил какую-ту фигню...
Вопрос № 17918: привет! чем можно дизасмить проги написаные на visual c++(7.0) .net? или - прога peid показывает что чат "vypress chat" защищена Microsoft Visual C++ 7.0 [Overlay] - чем можно ее дизасмить?...
Вопрос № 17932: Здравствуйте всем! Изучаю 23-ий выпуск рассылки "Ассемблер-это просто" касаемо перехвата прерываний вызываемых клавиатурой. Возникает очень много вопросов.На часть из них - сам нашел ответы (если правильно-то подтвердите). А на час...
Вопрос № 17939: доброго времени суток, уважаемые встала передо мной задача: написать как можно меньшую программу, которая использовала бы WinAPI для WinAPI необходимы несколько библиотек, но зачем инклудить весь файл если мне нужен заголовок одной-трех функц...
Вопрос № 17941: Добрый день. Читаю 13 выпуск. Новый оператор movs. И часть программы ........ mov cx,10 mov si,offset str1 //откуда будем брать mov di,offset str2// куда будем копировать rep movsb //str1=str2 //может это опечатка, может str2=str...
Вопрос № 17911 |
привет! где есть доки по ndis? в ya.ru.. находил какую-ту фигню |
Отправлен: 06.03.2005, 19:57 Вопрос задал: valix (статус: Посетитель) Всего ответов отправлено: 1 |
Отвечает: Boriss Здравствуйте, valix! По-моему, некорректный вопрос - не ясно, что именно Вас интересует, и что не понравилось. А так: http://www.ndis.com/ - это то, что надо? |
Ответ отправил: Boriss (статус: Профессор) Отправлен: 07.03.2005, 13:09 |
Вопрос № 17918 |
привет! чем можно дизасмить проги написаные на visual c++(7.0) .net? или - прога peid показывает что чат "vypress chat" защищена Microsoft Visual C++ 7.0 [Overlay] - чем можно ее дизасмить? |
Отправлен: 06.03.2005, 22:39 Вопрос задал: valix (статус: Посетитель) Всего ответов отправлено: 2 |
Отвечает: John Freeman Здравствуйте, valix! Это ~ ничем или неизвестный/авторский как правило простейший пакер (IMHO PEid sucks , особенно на малоизвестном), так что запихни в дебаггер и смотри!!! +может новый ASProtect опять маскируется(раньше под ASPack маскировался), но скорее всего это Armadillo и, как говорится, you sucks за компанию с PEID. |
Ответ отправил: John Freeman (статус: Специалист) Отправлен: 06.03.2005, 23:08 |
Отвечает: AxMAD Здравствуйте, valix! Можно спомощью IDA Pro c www.datarescue.com |
Ответ отправил: AxMAD (статус: Студент) Отправлен: 07.03.2005, 09:41 |
Вопрос № 17932 |
Здравствуйте всем! Изучаю 23-ий выпуск рассылки "Ассемблер-это просто" касаемо перехвата прерываний вызываемых клавиатурой. Возникает очень много вопросов.На часть из них - сам нашел ответы (если правильно-то подтвердите). А на часть - может кто подскажет? 1)зачем придумали Скан-коды?(мой ответ-это для совместимости разных типов клавиатур) но тогда выходит,что для разных клавиатур- разные таблицы соответствий Скан-кодов ASCII-кодам в BIOS ? Т.е если я поставлю другую клавиатуру (от другого производителя) то драйвер на нее будет менять данные в BIOS? 2)Где (в памяти) находится таблица соответствий Скан-кодов ASCII кодам?) Можно ли ее посмотреть? 3)Где можно найти хорошее описание как в Windows 2000 Pro работает эмулятор DOS ? (это мне обьяснили, что работая в командной строке Windows с DOS -овскими командами - я работаю в эмуляторе DOS). Т.е. я не могу понять - при работе в Windows при нажатии клавиш вызывается то же самое прерывание- int 9h или как показано в DeviceManagerResources - int 1. Или когда загружен DOS, то прерывания BIOS выполняют одни функции, а когда Windows -другие ? Заранее благодарен всем кто уделит внимание. |
Отправлен: 07.03.2005, 05:28 Вопрос задал: Slava_ (статус: Посетитель) Всего ответов отправлено: 3 |
Отвечает: Евгений Иванов 1.скан коды - это просто соответствие каждой клавиши своего номера. все эти коды идут через порт 96 от клавиатуры при поступлении прерывания. 2. таблица соответствий скан-кодов в ASCII-значения есть. доступ к ней можно осуществлять с помощью функции, которая всё сделает сама. функция 4Fh 15h-го прерывания. Удачи! |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 07.03.2005, 21:29 Оценка за ответ: 5 |
Отвечает: Стас Здравствуйте, Slava_! Черт его знает зачем они эти сканы придумали. Тогда клавиш было всего около 84 (чтоли), сейчас в основном 102. Если считать что для каждой клавиши нужно два кода - "нажали" и "отпустили" то 204 кода. Зачем было огород городить непонятно. Верояно были какие то проблемы железо деятелей или "заботились" о будущем? У кого какие мысли? >эмулятор DOS Для совместимости со старыми прогами это "эмулятор" сделан. А значит при нажатии клавиши срабатывает int9. Более того int9 срабатывает и в Win32 и в Unix (вероятно) - это аппаратное прерывание. Обрабатывается BIOS. Другое дело что конечно же винды не дадут тебе настоящий int9, а его "эмуляцию". Другие Int как биоса так и DOS эмулируются полностью, иначе какой смысл в эмуляции? А вообщем это только мои "размышлизмы". |
Ответ отправил: Стас (статус: Практикант) Отправлен: 08.03.2005, 01:52 Оценка за ответ: 4 |
Отвечает: Voituk Alexander Здравствуйте, Slava_! Скан-коды - это жестко регламентированные Мелкософтом цифири. И производители клав не могут их менять. Но это скан-коды только основных клавиш. А всякие мультимедийные отданы нв откуп производительм. Поэтому никакой таблицы соответствия нет. Можешь на сайте Мелкософта скачать документ со скан-кодами. А по поводу прерываний, то под ДОСом прерывания отличаются от Виндовозных. Для ДОС существует только одна таблица векторов прерываний, и находится она в начале памяти. Для Винды в защищенном режиме может быть много таблиц. Когда ты запускаешь ДОС под Виндой, то Винда эмулирует ДОСовскую таблицу. |
Ответ отправил: Voituk Alexander (статус: 3-ий класс) Отправлен: 09.03.2005, 14:53 Оценка за ответ: 5 |
Вопрос № 17939 |
доброго времени суток, уважаемые встала передо мной задача: написать как можно меньшую программу, которая использовала бы WinAPI для WinAPI необходимы несколько библиотек, но зачем инклудить весь файл если мне нужен заголовок одной-трех функций? с файлом .inc эта проблема решается просто - копи/пейст SendMessageA PROTO :DWORD,:DWORD,:DWORD,:DWORD вопрос. можно ли вытянуть аналогично данные из файла .lib? или както описать, зная в какой dll есть нужная функция? |
Отправлен: 07.03.2005, 12:46 Вопрос задал: r00fless (статус: Посетитель) Всего ответов отправлено: 3 |
Отвечает: Dark_Lord Здравствуйте, r00fless! Мне кажется, что вы немного недопонимаете то, отчего зависит размер скомпилированной программы. Дело в том, что размер скомпилированной программы не зависит от размера .inc и .lib файлов. При компиляции компановщик вкладывает в .exe файл (а вернее в PE его часть) несколько секций, в которые входят секции кода, данных, ... и таблица импорта. Именно для её создания используются .inc и .lib файлы. При этом в них объявляются лишь существующие функции, а используемые (и попадающие в таблицу импорта) компановщик выбирает сам. Если вы хотите получить программу наименьшего размера, думаю имеет смысл изучить структуру PE-файлов, и попытаться не использовать компановщик, а написать всю программу (в смысле не только код и данные, но и все структуры запускаемогофайла PE) самому и использовать не компилятор/компановщик, а транслятор (асм => код) типа Fasm-а. |
Ответ отправил: Dark_Lord (статус: Профессионал) Отправлен: 07.03.2005, 13:27 Оценка за ответ: 5 |
Отвечает: Bob Johnson Здравствуйте, r00fless! Дело в том, что в твою прогу попадут только те функции, которые ты используешь, а не весь lib файл, так что вырезать что-либо смысла не имеет. Чтобы уменьшить программу ты можешь: 1. Объединить секции кода и данных 2. Убрать релокационную информацию (тогда твоя программа будет работать только по одному адресу, например, 0х400000, но обычно это не критично) 3. Удалить MS-DOS stub. В общем, если тебе нужна минимальная программа - разбирайся с форматом PE и "пиши" его вручную. * EMan2.0: ---===*** Debug mode ***===--- |
Ответ отправил: Bob Johnson (статус: Академик) Отправлен: 07.03.2005, 20:04 |
Отвечает: Евгений Иванов во первых, размер программы зависит от того, какие ты будешь использовать подпрограммы. в winapi они все внешние, так что проблем с размером не будет. во вторых, могу такую программу сделать, которая бы делала такие файлы ;) то есть, есть как бы база данных. эта программа-помощник проходила бы исходники и находила бы вызовы подпрограмм - и создавала бы файл, в который заносила только те описания и определения, которые именно использует твоя программа. вообще-то программа ASMH уже работает, я её постоянно использую. Она ищет в листинге "Call ИМЯ" и выдает на выходе "extrn ИМЯ:proc" Совсем недавно добавил, чтобы выводил "global ИМЯ:near". я сам лично не использую PROTO подпрограмм, потому что часто заношу значения входящих параметром в стек сам, как мне удобно, чем добиваюсь удобства и повышения скорости. например: push FALSE eax ;+1, +2 mov [(t SCROLLINFO ebx).nPos], eax mov [(t SCROLLINFO ebx).fMask], SIF_POS Call GetDlgItem, [@@hDlg], icSB_ZoomLevel Call SetScrollInfo, eax, SB_CTL, ebx, TRUE Call SetDlgItemInt, [@@hDlg], icS_ZoomLevel ;-2, -1 обрати внимание на комментарии - +1, +2 это значит, что для подпрограммы SetDlgItemInt есть два параметра, которые я занёс ранее. а если бы этого не сделал, то регистр EAX изменился бы вызовом других подпрограмм. Или мне пришлось бы делать запись-чтение памяти, что медленно. так что в этом смысле Ассемблер мощнее языков высокого уровня, потому что я могу делать то, что хочу и как хочу. Удачи! |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 07.03.2005, 21:21 Оценка за ответ: 5 |
Вопрос № 17941 |
Добрый день. Читаю 13 выпуск. Новый оператор movs. И часть программы ........ mov cx,10 mov si,offset str1 //откуда будем брать mov di,offset str2// куда будем копировать rep movsb //str1=str2 //может это опечатка, может str2=str1 ........ str1 db '0123456789' //почему в этих строках str2 db '9876543210' //нет знака $ Я бы хотел посмотреть как это работает в отладчике. Но в отладчике просматриваются только регистры. Можно ли просматривать переменные, если да, то как ( у меня AFDpro). Если нельзя, то преведите пожалуйста код программы, кот. можно было бы добавить, чтобы просмотреть содержимое этих переменных на экране (распечатать). |
Отправлен: 07.03.2005, 13:01 Вопрос задал: psevdo (статус: 1-ый класс) Всего ответов отправлено: 6 |
Отвечает: Boriss Здравствуйте, psevdo! Почти не опечатка. Комментарий начинается не с // (как в С), а точки с запятой И действително, эта СТРОКА копирует одну строку в другую . Показывать, как догадываюсь не собираемся - можно и без $. Просто в СХ записали, сколько байт копировать Посмотреть в отладчике: нужно смотреть дамп памяти - то есть, посморите, где str2 - по адресу и "глядите" туды AFD сейчас не помню - есть и у него команда для этого. Если надо, распакую документацию и погляжу А выводть можно функцией 40Н прерывания 21Н: АН - 40h BX - 1 (а так handler - можно и в файл. 1 - стандартное устройство вывода = экран) DS:DX - адрес строки CX - сколько байт выводить |
Ответ отправил: Boriss (статус: Профессор) Отправлен: 07.03.2005, 13:36 |
Отвечает: Котиев Зураб Здравствуйте, psevdo! //str1=str2 //может это опечатка, может str2=str1 разницы нет они все равно будут равны друг другу. Знак $ нужен лишь обработчику 9 прерывания int21h, для указания конца строки .Для movs он не нужен.В данном случае префикс rep по значению указанному в регистре cx определяет сколько байт нужно переслать. Насчет AFDpro точно не помню (давно дело было) но там вроде должно быть окно данных там по смещениям и смотри.А вообще лучше пользуйся Turbo Debugger от Borland. |
Ответ отправил: Котиев Зураб (статус: 2-ой класс) Отправлен: 07.03.2005, 16:33 |
Отвечает: Евгений Иванов Здравствуйте, psevdo! movs копирует из DS:SI по ES:DI. полный синтаксис: MOVS source_string,destination_string
|
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 07.03.2005, 22:12 |
Отвечает: Стас Здравствуйте, psevdo! Тут много чего написали, а по сути ты прав действительно в di(str2) копируется из si(str1), только это не DOS, а ассемблер, а в ассеблере нет '$'. Либо ты сам ищешь конец строки (какой придумаешь - обычно 0 или тотже $), либо по количеству символов, как в данном случае в CX. |
Ответ отправил: Стас (статус: Практикант) Отправлен: 08.03.2005, 00:33 |
Отвечает: Dark_Lord Здравствуйте, psevdo! 1) в коментариях к rep movsb скорее всего опечатка, строка из si копируется в буфер по адресу в di. 2) Знак "$" как завершитель строки, был прибуман в дос и только для дос функций. Его, конечно можно использовать и во всех других случаях, но не обязательно. В данном случае длинну строки определяет занесённое в cx значения, здесь 10. 3)в AFDPro есть два окна данных, чтоб просматреть значение переменной/строки в памяти нужно узнать адрес этой строки и установить адрес одно из этих окон на этот адрес, тогда в нич будет показываться то, что нужно вам. |
Ответ отправил: Dark_Lord (статус: Профессионал) Отправлен: 08.03.2005, 10:19 |
Отвечает: Voituk Alexander Здравствуйте, psevdo! По поводу первого вопроса - какая разница str1=str2 или str2=str1? А знак $ нужен только для вывода строки на экран ДОСовской функцией. Это же ассемблер, здесь нет никаких правил по объявлению строк. В отладчике ты не посмотришь переменные. Для этого нужно смотреть память, где они располагаются. Как у тебя - такого отладчика не знаю. Но для изучения ассемблера лучше пользовать Borland Turbo Debugger. |
Ответ отправил: Voituk Alexander (статус: 3-ий класс) Отправлен: 09.03.2005, 14:27 |
© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.prog.faq |
Отписаться |
В избранное | ||