Я начал писать ассемблер в 1977 году, пройдя длинный путь: сначала изучил базовые операции (and, or, xor, not) и восьмеричную математику, прежде чем писать программы для DEC PDP-8 / E с OS / 8 и 8k памяти. Это было в 1977 году.
С тех пор я открыл для себя несколько приемов изучения сборки для незнакомых мне архитектур. Было несколько: 8080/8085 / Z80, x86, 68000, VAX, 360, HC12, PowerPC и V850. Я редко пишу автономные программы, обычно это функции, связанные с остальной частью системы, которая обычно написана на C.
Итак, прежде всего я должен иметь возможность взаимодействовать с остальной частью программного обеспечения, которое требует изучения передачи параметров, компоновки стека, создания кадра стека, положений параметров, положений локальных переменных, отбрасывания кадра стека, возвращаемых значений, возврата и очистки стека. . Лучший способ сделать это - написать функцию, которая вызывает другую функцию в C, и изучить листинг кода, созданный компилятором.
Чтобы изучить сам язык ассемблера, я пишу простой код, наблюдая, что генерирует компилятор, и выполняю пошаговое выполнение в необработанном отладчике. У меня есть руководства по набору инструкций, поэтому я могу найти инструкции, в которых я не уверен.
Полезно узнать (помимо упомянутой ранее обработки стека), как компилятор генерирует машинный код с учетом определенной языковой конструкции высокого уровня. Одна из таких последовательностей - это то, как индексированные массивы / структуры преобразуются в указатели. Другой - это базовая последовательность машинного кода для циклов.
Так что же такое «сырой отладчик»? Для меня это отладчик, который является частью простого пакета разработки и не пытается защитить меня от оборудования, такого как отладчик (-ы) Visual. В нем я могу легко переключаться между отладкой исходного кода и отладки сборки. Он также быстро запускается из среды разработки. У него нет трех тысяч функций, скорее всего, тридцати, и вы будете использовать их 99,9% времени. Пакет разработки обычно является частью установщика, где вы щелкаете один раз для утверждения лицензии, один раз для утверждения настройки по умолчанию (разве вам не нравится, когда кто-то подумал и сделал эту работу за вас?) И последний раз для установки .
У меня есть одна любимая простая среда разработки для x86-32 (IA-32), и это OpenWatcom. Вы можете найти его на openwatcom.org.
Я новичок в x86-64 (AMD64), но переход кажется простым (как при переходе с x86-16 на x86-32) с некоторыми дополнительными уловками, такими как дополнительные регистры от r8 до r15 и что основные регистры 64-битные. широкий. Я совсем недавно наткнулся на среду разработки для XP / 64, Vista / 64 и 7/64 (вероятно, также работает для серверных ОС), и она называется Pelles C (pellesc.org). Он написан и поддерживается неким Пелле Ориниусом из Швеции, и по тем нескольким часам, которые я провел с ним, я могу сказать, что ему суждено стать моим фаворитом для x86-64. Я пробовал пакеты Visual Express (они устанавливают так много мусора - вы знаете, сколько деинсталляций вам нужно сделать потом? Более 20), а также попытался получить gcc из одного места для работы с IDE (eclipse или что-то еще ) От другого.
Как только вы зашли так далеко и натолкнетесь на новую архитектуру, вы сможете потратить час или два на просмотр сгенерированного списка, а после этого в значительной степени узнать, на какую другую архитектуру он похож. Если конструкции индекса и цикла кажутся странными, вы можете просмотреть исходный код, их генерирующий, а также, возможно, уровень оптимизации компилятора.
Думаю, я должен предупредить вас, что как только вы освоитесь, вы заметите, что за столиками рядом, у кофемашины, на собраниях, на форумах и во многих других местах будут люди, которые будут ждать вас, чтобы презирать вас, высмеивать вы, бросайте вам неполные цитаты и даете неосведомленные / некомпетентные советы из-за вашего интереса к сборке. Почему они это делают, я не знаю. Возможно, они сами являются неудавшимися программистами на ассемблере, возможно, они знают только объектно-ориентированное программирование (C ++, C # и Java) и просто не имеют ни малейшего представления о том, что такое ассемблер. Возможно, кто-то, кого они «знают» (или кого знает их друг), кто «действительно хорош», возможно, читал что-то на форуме или слышал что-то на конференции и, следовательно, может сказать абсолютную правду о том, почему сборка - это пустая трата времени. время. Их здесь много, в stackoverflow.
person
Community
schedule
16.02.2011