При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
Информационный Канал Subscribe.Ru |
Выпуск № 139
от 17.05.2005, 20:20
Администратор: | Калашников О.А. |
В номере: | Вопросов: 2, Ответов: 5 |
Вопрос № 20696 |
Я извиняюсь за беспокойство. Я решил научится программировать на Assembler’е. Мне всего 16 лет! У меня возникла проблема по запуску Ассемблера. Скажите, я правильно его запускаю(я не совсем чайник, я умею прогать на Паскале!). Ассемблер находится в папке «а». В MS-Dos я вбиваю путь: C:ainmasm.exe На что программа отвечает: Microsoft ® MASM Compatibility Driver Version 6.1a Copyrifght © Microsoft Corp 1991. All rights reserved. Usage: MASM [option…] source(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;] Run “MASM/H” for more info И всё! Потом она возвращается к командной строке. Что делать? Помогите пожалуйста! E-mail: novvik@yandex.ru |
Отправлен: 11.05.2005, 21:15 Вопрос задал: Новиков Виктор Алескандрович (статус: Посетитель) Всего ответов отправлено: 3 |
Отвечает: Стас Здравствуйте, Новиков Виктор Алескандрович! 10 секунд полета, полет нормальный!!! :) Все в норме, смотри сам - MASM просит тебя дать ему файл который будет компилировать. Берешь какую нибудь прогу *.asm (или сам пишешь), скармливашь её masmу - C:ainmasm.exe (опции) мояпрога.asm если нет ошибок и т.д. появится мояпрога.obj затем даешь обглодать его (мояпрога.obj) линкеру, название и опции зависят от линкера, например: c:ainlink мояпрога.obj /subsystem:windows опять же, если без ошибок - появится: мояпрога.exe (или мояпрога.com) Все, готово. Для того чтобы автоматизировать процесс я пишу bat файлы, можно использовать make(я его не люблю), есть даже среды для программирования(чтобы было как в Паскале), с подсветкой синтаксиса и со всеми делами, но я не использую, и конкретнее не расскажу. |
Ответ отправил: Стас (статус: Практикант) Отправлен: 12.05.2005, 01:27 Оценка за ответ: 5 |
Отвечает: Ayl Здравствуйте, Новиков Виктор Алескандрович! Ну она же тебе все написала: Microsoft ® MASM Compatibility Driver Version 6.1a Copyrifght © Microsoft Corp 1991. All rights reserved. Информация о производителе и программе. Usage: MASM [option…] source(.asm),[out(.obj)],[list(.lst)],[cref(.crf)][;] Использование: MASM [опции] исходный_файл(.asm), <доп.параметры> Run “MASM/H” for more info Выполните “MASM/H” для получения дополнительной информации Программа MASM - это компилятор командной строки. Т.е. он получает на вход текстовый файл с программой на асме и пытается его откомпилировать во что-нибудь запускаемое. Если это ему удается - он формирует файл с расширением .COM или .EXE. Если не получается - выдает сообщения об обнаруженных ошибках. Никакой среды программирования "а ля Borland Pascal" у MASM'а нет. Используй любой текстовый редактор, только следи за кодировкой русских букв. Если ты пишешь под ДОС, то кодировка должна быть ДОСовской (альтернативная, CP-866, DOS, OEM - в редакторах она по-разному называется). |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 12.05.2005, 12:48 Оценка за ответ: 5 |
Отвечает: Евгений Иванов Здравствуйте, Новиков Виктор Алескандрович! "научиться" нужно писать с мягким знаком. это раз. запускать Ассемблер нужно после того, как ты что-то напишешь. а для этого нужны знания побольше, чем научиться что-то запускать. Но если ты не знаешь даже, КАК Ассемблер запускать, то что же можно сказать о том, чтобы создать что-то?! ты хотя бы понимаешь, что такое командная строка? а читать по англ умеешь? что такое слово Usage - знаешь? может быть, тебе стоит подъучить англ перед тем, как программировать? а математику на таком же уровне знаешь? потому что программирование - это по большей части математика и алгоритмы. удачи! |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 12.05.2005, 17:15 Оценка за ответ: 2 |
Вопрос № 20757 |
Здравствуйте уважаемые эксперты! Я задавал следующие вопросы еще раньше, но тогда я не получил ответов. К ним прибавились еще. Первый вопрос. Относительно сегментов. С помощью команды MERGE линковщика можно переименовать любой сегмент. А как это можно сделать при написании програмного кода? Допустим указать после .CODE какую-то директиву? А можно модифицировать код в памяти? И еще как создать дополнительные сегменты (и их атрибуты). Второе: Относительно DOS части программы. Можно ли ее изменить? А убрать вообще. Если можно, то как? Я видел Windows прогу которая начинается так: «MZfarbrauschPE». Что это означает? И строка "This programm......." отсутствует. Что это за формат? Третий: Антиотладка. У меня есть несколько программ, которые вешают дизассемблер, когда ее собираются ТОЛЬКО дизассемблировать, даже не отлаживая. Как можно это сделать под DOSом, Windows’ом. Можно ли это сделать на VB6? А как вообще можно повесить отладчик? Мои соображения: например, с стэк запихаются флажки, кодовый сегмент отлажчика (резидента и т.д.) любое число и делается push 0 pop es mov ax, 4c00h jmp dword ptr es:[21h*4] Отладчик будет завершен (резидент и т.д.)?? А если по адрессу, куда направлен 3 вектор переслать int 3? |
Отправлен: 12.05.2005, 19:27 Вопрос задал: Nieh (статус: Посетитель) Всего ответов отправлено: 2 |
Отвечает: Ayl Здравствуйте, Nieh! 1а. А почему бы тебе просто не использовать полное описание сегмента, а не полагаться на директивы с точкой? Насколько я понимаю, в коротких директивах используются параметры по умолчанию. Например, .DATA выполняет выравнивание на границу слова. Пиши определения сегментов полностью - тогда не будет необходимости переопределять директивы. 1б. Можно. Например, можно написать вызов старого обработчика прерывания таким образом: db 9ah ; код команды call far old_int_vec dd ? ; адрес старого обработчика и в момент перехвата прерывания адрес записывается в переменную old_int_vec. Когда программа дойдет до команды с кодом 9ah, то в памяти уже будет находиться адрес старого обработчика и будет осуществлен его вызов. 3. Ну-ну, что-то ты гонишь. Прога - это все-таки последовательность байт, не обладающая сознанием. И отреагировать на то, грузится ли она в память для выполнения "честно" или под отладчиком, не способна. Соответственно, причина завешивания отладчика - не в этом. Кстати, дизассемблер точно может быть повешен, т.к. часто дизассемблер работает в режиме отладчика, т.е. он пытается прогнать прогу в режиме отладки для определения частей программы. Вот тут его и можно грохнуть. Кстати, для защиты от дизассемблера вполне подойдет просто шифрование программы. А вот с отладчиками придется повозиться. Насчет того, как повесить отладчик. Зависит от того, как именно он работает. Например, простенький afdPRO вешался напрочь такими командами: in al, 21h and al, 0fdh out 21h, al Эта последовательность команд маскирует на уровне контроллера прерываний прерывания от клавиатуры. В результате, больше от контроллера клавиатуры не будет получен ни один запрос, т.е. система будет лишена клавиатуры. В результате отладчик отрублен (впрочем, как и вся DOS-сессия). До Windows это приводило к необходимости перезагрузки компа. Но при этом, та же самая последовательность безболезнено проходит под Turbo Debugger'ом, т.к. он восстанавливает значение порта 21. Кстати, для человека, который понимает, что делает та или иная последовательность команд, обойти такую защиту труда не составит даже на afdPRO. Он просто не позволит программе выполнить эти действия. Насчет того, как повесить отладчик. Ну, самое простое - перенесение стека либо в свой код, либо еще куда-нибудь в важную область. Если делать это на запрещенных прерываниях и не писать в стек, то при нормальной работе программы (без отладчика) это не приведет к сбою. Если же програ будет работать под отладчиком - дело плохо. Потому что при выполнении программы с установленным флагом трассировки после каждой команды вызывается прерывание 1. В результате в стек заносятся по крайней мере 3 слова: Flags, CS и IP. Т.е. затирается важная информация. В результате действия программы становятся непредсказуемыми. Но это обойти тоже нетрудно. Твое предложение - просто утопия. Как ты получишь кодовый сегмент отладчика? Тебе его просто никто не даст получить. И вызвать функцию 4c 21-го прерывания не дадут. Вообще, при достаточном времени и хороших отладочных средствах (например, удаленная отладка или отладка в виртуальной среде) и достаточной квалификации хакера любая защита обходится. Ее можно только затруднить. Например, передавать управление "случайным" образом. Постоянно изменять среду работы программы (настройки экранного режима, "отрубать" клавиатуру и мышь и т.д.), шифровать/расшифровывать код перед передачей ему управления, причем делать это по ключу, зависящему от контрольной суммы пройденных участков программы. Т.е. добиться того, чтобы процесс отладки стал практически невозможным (например, чтобы прежде чем добраться до нужного места (которое, есс-но, зашифровано), нужно было потратить многие человеко-часы (и даже дни!) на разбор противоотладочного кода). Например, довести количество выполняемых команд на этом участке до десятков и сотен тысяч. На самом деле, с защитой ситуация такая. Нужно определить стоимость защиты и защищаемого ПО и сделать так, чтобы стоимость взлома превосходила стоимость ПО. И оценить уровень потенциального взломщика и использовать приемы, недоступные этому уровню. Только не надо сразу же оценивать уровень как "супер-профессионал". В этом случае лучше сразу отказаться от защиты - все равно сломает. Лучше идти от простого к сложному. И чем больше разных подходов - тем лучше. На самом деле должна быть солянка из различных механизмов защиты - тогда рабобраться и обойти сложнее. |
Ответ отправил: Ayl (статус: Профессор) Отправлен: 13.05.2005, 11:55 |
Отвечает: Евгений Иванов Здравствуйте, Nieh! - для назначения имён и параметров сегментам используй DEF-файлы. - для изменения ДОС-части программы используй тот-же DEF-файл с параметром STUB |
Ответ отправил: Евгений Иванов (статус: Профессор) Отправлен: 15.05.2005, 11:45 |
© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.
http://subscribe.ru/
http://subscribe.ru/feedback/Подписан адрес:
Код этой рассылки: comp.soft.prog.faqОтписаться
В избранное | ||