Здравстуйте форумчане! Совсем недавно я очень сильно заинтересовался программированием. Очень интересно. Мне посоветовали начать с изучения языка Ассемблера. Мотивировали это тем, что так я смогу понять как работает процессор, да и весь компьютер в целом, как устроена архитектура и как она функционирует, изучение языка Ассемблера позволит лучше узнать как работает операционная система. Также сказали, что язык Ассемблера предоставляет неограниченные возможности для программиста, полную свободу действий и как следствие - огромное, неограниченное пространство для творчества и самовыражения. Также сказали, что зная язык Ассемблера человек без труда изучит большинство других языков программирования. Также мне порекомендавали именно Ваш сайт, так как тут собираются лучшие программисты страны. К сожалению, с началом изучения языка Ассемблера, как я понял, этот язык очень многогранен. И у меня возникли сложности в связи с этим объястоятельством. Так как я только начинаю программировать я не знаю чего я хочу. Я читал статьи на Вашем сайте про изучение программ, про написание вирусов, программирование драйверов, работой с утсройствами и так далее. Глаза разбегаются, если честно. Хочется заниматься всем. Но я так думаю, что надо начинать с чего-то одного, и копать вглубь. Сначала. Наиболее меня заинтересовало изучение программ. Изучение защитных механизмов. Как мне кажется ,-это широкая область и тут есть где "развернуться". Наверное, очень интересно изучать чужие программы, идеи, разбираться во всём этом. Это очень интересно. Как я понял, без знания языка Ассемблер тут не обойтись. Собственно, я начал его изучать. Очень интересно. Узнаю как работает компьютер. Но по прошествии определенного времени у меня возникла проблема. Я начинаю таптаться на месте и становится менее интересно. Как я понял, при программировании очень важна практика. Я взял задачник по языку "Паскаль" и стал решать эти задачи на языке Ассемблера. Но всё задачи сводились к каким-то, как мне кажется, непригодным на практике действиям. И все очень похожи. Я выучил основной синтаксис языка, умею делать : ветвления, циклы, массивы и так далее. Собственно вопрос. Подскажите практические задачи, которые можно было бы решить мне сейчас. Простые, но практические. Вот мне посоветовали реализовать криптографические алгоритмы: шифр Цезаря, таблицу Полибия, шифровальный диск, шифрование методом гаммирования. Еще посоветовали реализовать Азбуку Морзе. Я уже начал всё это делать. Пловину написал. Подскажите, пожалуйста, что еще можно написать? Один человек посоветовал написать криптор. Программа, которая шифрует другую программу. Сказал начать с простейшего. Как-то через оператор xor. Но я не совсем понял. Это можно так,да? Ребята, помогите, если кто знает. Посоветуйте простые, но практические программы. Область интересов: изучение программ, написание программ шифровальщиков. Я использую операционную систему Windows. Заранее всем большое спасибо!
Leks Если есть желание "изучать" программы, то зачем заниматься переписыванием Паскалевских задач на ассемблере? Возьмите какую-нибудь игру и ковыряйте ее до полного понимания. Я бы посоветовал (если не ошибся с названием) Twinsen Odissey (производитель Sierra): там много хорошо реализованной графики, работа с различными ресурсами (в том числе интерпретатор игры). Ассемблер изучите (если справитесь) будь здоров! Можно поковыряться с защитой (достаточно заглянуть на кряклаб и взять какую-нибудь программу попроще). Короче, не третьте время на программирование "простеньких" задач на ассемблере (что вызывает у большинства зубовный скрежет и тошноту), расширяйте кругозор глобально.
Нет-нет, я учусь программировать на чистом языке Ассемблера. Изучить и закрепить самые основы. А сборник по Паскалю - это то, что нашел под рукой. Беру оттуда задания, но пишу на Ассемблере решения, а не на Паскале. А щас, когда изучил синтаксис и основные конструкции эти задачи стали не интересны. Топчусь на месте. Хочется перейти на настоящие программы.Поэтому и попросил какие-нибудь задания простые, но которые пригодятся на практике или же которые являются "миниатюрой" больших программ. А изучать программы пока тяжело. Я пробовал, но пока я чувствую мне рано. Да и по началу хочется научиться своё создавать, мне кажется так будет легче изучать чужое. crypto, спасибо Вам за ответ. Обязательно посещу кряклаб.
Leks Самый простой вариант в вашем случае - пишите криптографические алгоритмы, такие как Bas64, md5, etc... И с алгоритмами познакомитесь, и навыки прокачаете.... =)
Попробуйте делать приложения с гуи, например простенький шестнадцатиричный редактор. А вообще, на мой взгляд, нужно уже не решать задачи из учебника (раз с этим не возникает проблем), а писать полноценные програмулины. Кучу всего попутно изучите, и скучать не придется, предела совершенству нет. Подумайте, чего вам не хватало всегда в чужом софте, что не нравилось, и попробуйте написать свою утилитку. Изучите и оптимизацию заодно. Например, можно брать битый или недокачанный ави-файл, при открытии которого плеер тормозит или не дает перематывать, разботывать его заголовок и перебирать все фреймы, а потом делать блок индексов и записывать туда, где ему положено быть. Это несложно, но научит внимательности и аккуратности, да и пользу прога может приносить людям. Декомпилируйте консольный архиватор рар и напишите свою библиотеку для архивирования файлов. Напишите прогу, которая будет перебирать все диски в системе и разбирать их логическую структуру, выводить имеющиеся разделы (не только виндовые) и неразмеченное пространство. Используйте апи по минимуму, вручную разбирайте таблицы разделов и загрузочные сектора. Научитесь заодно читать документацию. Напишите статистический анализатор файлов, чтоб он считал кол-во встречания каждого байта в файле и выводил статистику в файл, затем то же самое для биграмм и триграмм. Затем добейтесь его устойчивой работы на файлах произвольного размера, хоть в десятки гигабайт, и чтоб статистика по биграммам считалась верно, даже если биграмма попадает на границу буфера для чтения. Полезная в хозяйстве прога будет, и писать интересно.
А в криптографию я б пока не лез, область сама по себе обширная и непростая, хорошо б вначале научиться в совершенстве владеть инструментом, то есть языком, а затем погружаться в эту пучину. Особенно, если раньше с криптографией дела не имели. Иначе получится тупое переписывание существующих исходников на асме, без понимания сути.
большинство - студенты. это больше относится к алгоритмизации. зная языки программирования, которые поддерживают переменные, метки (как в ассемблере) и оператор goto, можно без труда реализовать эти алг. структуры. вы бы сначала выучили основные логические операции, а потом реализовывали алгоритмы шифрования. инструкция XOR - это логическое Исключающее ИЛИ. В паскале такой нет. но можно реализовать и существующих логических операций.
Microedition ?!! В паскале есть все, только в отличие от С в нем булевские и побитовые операторы обозначаются одинаково - компилятор сам понимает что к чему в зависимости от типа операндов
leo - ну к XOR это в любом случае не относится Он всегда побитовый, что такое логический XOR как-то трудно представляется.
cppasm 1) A XOR B = ((NOT A) and B) or ((NOT B) and A) 2) A XOR B = (NOT(A and B)) and (A or B) 3) A XOR B = (A or B) - (A and B) Если мне не изменяет память в паскале есть логическая операция эквивалентно, подставить к ней логическое отрицание и будет XOR
Если хочешь научиться хорошо программировать на асме, то выбирай путь крэкера. Через некоторое время будешь знать что к чему и понимать, что делает программа, не особо углубляясь в подробности. IMHO главное, если ты пишешь на асме - эту умение умственно "протрассировать" код, а ещё нужна любовь к отладчику, без него на асме писать, наверно, невозможно в принципе. Вот это правильно!!! Если привыкнешь к асму, то потом, когда придётся писать на других языках, будешь скрежетать зубами и вопить матом на всю комнату потому, что нельзя будет повторить (легко повторить, по крайней мере) элементарные вещи, к которым ты привык на асме. Компилятор будет тыкать тебя как нашкодившего котёнка лицом в ... и злобно улыбаясь говорить : "Нет, скотина, ты будешь писАть так, как мне нравиться, чтобы занять как можно больше тактов!". И тут Остапа понесло... P.S.: Чтобы избежать холивара скажу, что всё это только моё мнение и ничего больше... я и сам пишу на крестах... стискиваю зубы и пишу.... Улыбайтесь, господа, улыбайтесь!
Z3N +1 Каждый раз когда я пишу на высоком уровне мой код становится всё более кривым. Там думать по-другому надо. leo Я тоже pas уважаю. P.S. Можно обменять регистры местами через xor Code (Text): xor ax,dx xor dx,ax xor ax,dx
> Однако на современных ЦП XOR-техника значительно медленнее, чем использование временной переменной > для обмена. Это происходит по причине распараллеливания выполнения команд. (c) wikipedia
Может и вправду нужно по другому думать.... Хотя тут можно и поспорить. Я особо много программистов на ЯВУ не знаю, но мой друг, который учиться на программиста уже полтора года, пишет отвратительный код. Он даже сам с этим соглашается . Он пишет уже полтора года, а не умеет пользоваться винапи!!! Он сразу писал под консоль, потом на С#, а там можно обойтись без апи... вот и привык. А теперь когда надо было написать что-то более-менее серьёзное не знал что делать. И решил писать на управляемом коде, который по функционалу похож на сишарп. Вы бы видели эту программу! Я получил эстетический шок.... Она написана так не потому, что он плохой программер, а потому, что стиль диктует компилер. Он и сам говорил, что главное, чтобы его за эту прогу не побили.... А ведь программа не особо сложна, поиск дупликатов файлов на диске. А у него вышло около тысячи строк...
cppasm Не понял, что не относится ? По крайней мере в TP7 есть XOR побитовый и XOR логический = булевский Если под логический = булевский то тоже самое, что и побитовый, только над булевскими переменными, принимающими только два значения: false и true. Например, условие if (a > 0) xor (b > 0) then ... выполнится только в случае когда одно из выражений false, а другое true. Исключающее ИЛИ - это когда либо одно, либо другое, но не оба вместе (поэтому оно и исключающее)