Вопрос № 69579: Уважвемые эксперты! Ответе,пожалуйста, на 2 вопроса:
1. Можно ли при выводе на экран результата вычисления обойтись без использования Win API?
2.В языке Basic есть очень хорошая функция оператора print. Пишешь,например, print "S=#####.##...Вопрос № 69611: Здравствуйте.
Хочу задать вопрос по необходимости знания и применения ассемблера в современном программировании.
Сразу хочу сказать, что профессиональным программистом я не являюсь, пишу программы только ради собственного интереса и удовольст...Вопрос № 69663: Уважаемы эксперты помогите разобраться с программой Николая Ивановича, по запросу пароля. Объясните принцип ввода нового пароля, по усмотрению пользователя или дайте что по проще, так сказать деревянную версию...
Вопрос № 69.579
Уважвемые эксперты! Ответе,пожалуйста, на 2 вопроса:
1. Можно ли при выводе на экран результата вычисления обойтись без использования Win API?
2.В языке Basic есть очень хорошая функция оператора print. Пишешь,например, print "S=#####.#####";S и при подсчёте комп сам считает и выводит ответ на экран. А в ассемвлере есть подобный оператор или функция?
Зарание спасибо.
Отправлен: 04.01.2007, 21:19
Вопрос задал: Loriendil (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, Loriendil!
1. Нельзя. А зачем? Используй - это удобно и практично.
2. Есть. Это sprintf.
Удачи.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 04.01.2007, 21:25 Оценка за ответ: 5
Вопрос № 69.611
Здравствуйте.
Хочу задать вопрос по необходимости знания и применения ассемблера в современном программировании.
Сразу хочу сказать, что профессиональным программистом я не являюсь, пишу программы только ради собственного интереса и удовольствия. Использую Delphi.
Основной вопрос: необходимо ли знание ассемблера для современного программиста, старающегося идти в ногу со временем и старающегося следовать последним тенденциям в программировании, таким как .Net?
Приложение:
Отправлен: 05.01.2007, 02:10
Вопрос задал: Destroy (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: ramok
Здравствуйте, Destroy!
1. рынок не ограничивается персональными компьютерами под управлением OS Windows, так что перечисленные вами факты мало влияют на другие области, где изначально применяется другой иструментарий.
2. в некоторых отраслях, знания какого нибуть ассемблера востребовано на прямую. например во встраиваемых системах (embedded system) или защите информации.
3. мнение создателя языка С++ по поводу необходимости знания ассемблера рядовыми программистами можно прочесть тут:
http://www.homepc.ru/2002/76/21080/
отсюда такое мое мнение: не знания ассемблера для любого программиста не является минусом, но наличие знаний хотя бы основ оного - большой плюс
Почитать стоит любой учебник для начинающих: Абель, Рудоков и Финовгенов, Юрков, Пирогов...
Ответ отправил: ramok (статус: 5-ый класс)
Ответ отправлен: 05.01.2007, 07:28
Отвечает: Луковкин Николай Иванович
Здравствуйте, Destroy!
Отвечаю на самый главный вопрос: Оправдана ли трата времени на изучение классического ассемблера новичкам?
Да оправдана!!!
Прежде всего, без знания ассемблера невозможно понять, как работает операционная система, как она делит ресурсы между программами и как хранит данные в своих служебных областях.
Ассемблер необходим при создании программы, взаимодействующих с аппаратурой. Это могут быть драйверы устройств, работающих с Windows или DOS.
Ассемблер нужен программисту, который хорошо пишет программы на Delphi, C++, Pascal и т.д., чтобы понять почему программа работает неправильно (исследуя написанную программу в отладчике).
Ассемблер необходим там, где от программы требуется большая скорость. Когда обнаруживается, что программа на языке высокого уровня (Ваш Delphi) работает правильно, но слишком долго, Вы пытаетесть найти узкие места в программе, для чего она подвергается профилированию: специальная программа следит, сколько времени потрачено на определенные участки программы, сколько раз вызываются те или иные процедуры. Профилирование выявляет узкие места программы, на которые тратится большая часть времени процессора. Эти вот
места и следует переписать на ассемблер, потому что хороший программист делает это лучше, чем компилятор языка высокого уровня!
И потом если Вы решили изучить исскуство РЕВЕРСИНГА (исследование и защита программ, написанных на любом языке высокого уровня от взлома), то без знания Ассемблера Вам просто не обойтись! Имейте это ввиду!
Убедил я Вас что Ассемблер надо изучать или нет?
Литература по изучению Ассемблера:
1. Для начинающих это "рассылки Олега Калашникова" или его книга "Ассемблер?Это просто!"
2. Еще мне очень нравятся книги по изучению Ассемблера:
А.Панов "Ассемблер" (программирование под OS DOS)
А.Крупник "Ассемблер -самоучитель" (автор хорошо учит как писать программы в среде Windows и исследовать их в отладчике OllyDbg)
Желаю Вам терпения и удачи в изучении Ассемблера!
Николай
--------- Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Уважаемы эксперты помогите разобраться с программой Николая Ивановича, по запросу пароля. Объясните принцип ввода нового пароля, по усмотрению пользователя или дайте что по проще, так сказать деревянную версию
Отвечает: Луковкин Николай Иванович
Здравствуйте, Огнёв Артём!
Я привел в пример Вам самую простую программу, написанную для ОС MS-DOS, принцип работы которой заключается в следующем:
а)программа запрашивает пароль и производит его проверку
б)при правильном введенном пароле программа вызывает сообщение "PASSWORD IS OK"
в)при неправильном - сообщение "PASSWORD IS NOT CORRECT"
Чтобы нам с вами проверить в работе эту программу сделаем следующее:
1.Напишем ассемблерный листинг программы в текстовом редакторе и сохраним его например как: password.asm
2.Откомпилируем password.asm в ассемблере (TASM или MASM) и получим password.exe файл
3.Загружаем password.exe в отладчик Turbo Debugger. Для этого в командной строке текстового редактора (где писали программу) пишем:
td password.exe нажмем Enter
P.S. Я думаю что текстовый редактор, командные файлы компилятора и отладчика находятся у вас в одной какой-нибудь папке, например в папке с названием ASM.DOS (где Вы пишите и исследуете написанные программы на Ассемблере)
4.Мы увидим окно отладчика. Вызываем окно процессора: View->CPU и разворачиваем кл.F5 окно на полный экран.
5.Выполняем трассировку программы кл.F8 до строки:
cs:00DE>DA3100 lea dx, string2-2
вывод сообщения на экран
6.Если нажать кл. Alt+F5, мы увидим, что программа вывела сообщение о вводе пароля:
Input Password
P.S. чтобы вернуть отладчик в первоначальное состояние необходимо нажать кл. Ctrl+F2
7.Продолжаем дальнейшую трассировку программы кл.F8 до строки:
cs:0013>CD21 int21h
8.Запрос пароля организован в трех строках программы:
lea DX,string2-2
mov AH,0Ah
int 21h
Если теперь нажать кл.F8, то программа будет запрашивать пароль:
Input Password
9.Так как мы не знаем првильного пароля, введем любые символы, например 1,2,3,4,5 и нажмем Enter
10.После этого нажимаем кл. трассировки F8 и доходим до места в программе:
cs:002D>F3A6 repe cmps string1,string2
11.Как видим, тут происходит сравнение введенной строки со строкой пароля. Чуть выше в тексте программы видно, что в регистры SI и DI помещаются две строки. Чтобы их посмотреть переместимся в окно данных (кл. F6) и нажимаем кл. Ctrl+G, а на запрос адреса введем string1
12.Мы видим строку, которая находится в переменной string1 (KEYSTOP), а следующая строка - это введенный нами пароль (1,2,3,4,5).
Вопрос: Зачем программе сравнивать две строки, одна из которых - введенный пароль?
Ответ: Значит, вторая строка - это искомый пароль!!!
Проверим.
13.Для этого перезапускаем программу кл. Ctrl+F2, и на запрос пароля введем KEYSTOP - получаем сообщение PASSWORD IS OK!
14.Ваш Вопрос: А где же тогда в ассемблерном листинге находится верный пароль?
Ответ: Конечно в строке string1
db 07Fh,071h,06Dh,067h,060h,07Bh,064h,'$'
это ничто иное как слово KEYSTOP в шестнадцатеричном значении!!!
15.Ты можешь заменить его своим словом, откомпилировать программу заново и попробовать с помощью отладчика найти его еще раз!
P.S. Артем, я посвятил немного тебя в исскуство РЕВЕРСИНГА и КРЕКИНГА! Т.е. я показал тебе на простом примере как исследуется и взламывается защита программ, написанных в среде OS DOS с помощью отладчика Turbo Debugger!
Если что непонятно пиши, обязателно отвечу.
Желаю тебе терпения и удачи в изучении Ассемблера!
Николай
--------- Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!