Изучение [закрытого] блока

Можно использовать lynx для автоматизации входа в систему, и он обеспечивает намного больше функций. Относитесь страница справочника рыси здесь

lynx может быть легко интегрирована со сценарием оболочки. Используя lynx с - подлинный параметр можно передать идентификатор и пароль для аутентификации.

-auth=ID:PASSWD устанавливают идентификатор авторизации и пароль для защищенных документов при запуске. Обязательно защитите любые файлы сценария, которые используют этот переключатель.

Hope это помогает.

99
задан Ryan Tenney 1 May 2012 в 04:16
поделиться

22 ответа

Начните с MASM32 и оттуда посмотрите на FASM . Но вы получите удовольствие от MASM.

40
ответ дан 24 November 2019 в 05:04
поделиться

Я начал изучать MIPS, очень компактную 32-битную архитектуру. Это сокращенный набор инструкций, но его легко понять новичкам. Вы по-прежнему сможете понять, как работает сборка, не перегружая себя сложностью. Вы даже можете загрузить небольшую симпатичную среду IDE, которая позволит вам скомпилировать ваш код MIPS: clicky Я думаю, что когда вы освоите это, будет намного проще перейти к более сложным архитектурам. По крайней мере, я так думал :) На этом этапе у вас будут основные знания о распределении памяти и управлении ею, логическом потоке, отладке, тестировании и т. Д.

3
ответ дан 24 November 2019 в 05:04
поделиться

Сборка, которую вы должны написать вручную, и сборка, созданная компилятором, часто сильно отличаются, если смотреть с высокого уровня. Конечно, внутренности программы будут очень похожи (в конце концов, существует очень много разных способов кодирования a = b + c ), но они не являются проблемой, когда вы пытаетесь перепроектировать что-то. Компилятор добавит тонну шаблонного кода даже в простые исполняемые файлы: в прошлый раз, когда я сравнивал, "Hello World", скомпилированный GCC, был около 4 КБ, тогда как если бы он был написан вручную в сборке, это около 100 байт. В Windows дела обстоят хуже: в прошлый раз, когда я сравнивал (правда, это был последний век ), наименьшее «Hello World», которое я мог заставить сгенерировать мой компилятор Windows, составляло 52 КБ! Обычно этот шаблон выполняется только один раз, если вообще выполняется, поэтому он не сильно влияет на скорость программы - как я уже сказал выше, ядро ​​программы, часть, на которую тратится большая часть времени выполнения, обычно очень похоже, скомпилировано или написано от руки.

В конце концов, это означает, что экспертный ассемблер программист и эксперт дизассемблер - две разные специальности. Обычно они находятся у одного и того же человека, но на самом деле они разные, и изучение того, как стать отличным кодировщиком ассемблера, не очень поможет вам в изучении реверс-инжиниринга.

Что вы хотите сделать, так это взять IA -32 и AMD64 (оба рассматриваются вместе) руководства по архитектуре от Intel и AMD , а также просмотрите первые разделы по инструкциям и кодам операций. Может быть, прочтите пару руководств по ассемблеру, просто чтобы понять основы ассемблера. Затем возьмите небольшой пример программы, которая вас интересует, и разберите ее: пройдитесь по ее потоку управления и попытайтесь понять, что она делает. Посмотрите, сможете ли вы исправить это, чтобы сделать что-нибудь еще. Затем попробуйте еще раз с другой программой и повторяйте, пока не почувствуете себя достаточно комфортно, чтобы попытаться достичь более полезной цели. Возможно, вас заинтересуют такие вещи, как «кряки», созданные сообществом реверс-инжиниринга, которые представляют собой проблемы для людей, интересующихся реверс-инжинирингом, которые могут попробовать свои силы и, надеюсь, научиться чему-то в процессе. Их сложность варьируется от базовой (начните здесь!) До невозможной.

Прежде всего, вам просто нужно практиковаться . Как и во многих других дисциплинах,

33
ответ дан 24 November 2019 в 05:04
поделиться

Я обнаружил, что Hacking: The Art of Exploitation является интересным и полезным способом в этой теме ... не могу сказать, что когда-либо использовал эти знания напрямую, но на самом деле я это читал не поэтому. Это дает вам гораздо более полное представление об инструкциях, в которые компилируется ваш код, что иногда бывает полезно для понимания более тонких ошибок.

Не отчаивайтесь от названия. Большая часть первой части книги - это «Хакерство» в понимании этого слова Эриком Раймондом: творческие, удивительные, почти хитрые способы решения сложных проблем. Меня (и, возможно, вас) гораздо меньше интересовали аспекты безопасности.

8
ответ дан 24 November 2019 в 05:04
поделиться

Я бы не стал сосредотачиваться на попытках писать программы на ассемблере, по крайней мере, сначала. Если вы работаете на x86 (что я предполагаю, поскольку вы используете Windows), существует масса странных особых случаев, изучать которые бессмысленно. Например, многие инструкции предполагают, что вы работаете с регистром, который вы явно не называете, а другие инструкции работают с некоторыми регистрами, но не работают с другими.

Я бы узнал достаточно о вашей предполагаемой архитектуре, чтобы вы понимали основы, тогда просто прыгайте прямо и попытайтесь понять вывод вашего компилятора. Вооружитесь руководствами Intel и сразу погрузитесь в вывод вашего компилятора. Выделите интересующий код в небольшую функцию, чтобы быть уверенным, что вы все поймете.

Я бы рассмотрел следующие основные моменты:

  • регистры: сколько их, как их зовут, и каковы их размеры?
  • порядок операндов: добавить eax, ebx означает «Добавить ebx в eax и сохранить результат в eax».
  • FPU: изучить основы стека с плавающей запятой и как вы конвертируете в / из fp.
  • режимы адресации: [base + offset * multiplier], но множитель может быть только 1, 2 или 4 (или, может быть, 8?)
  • соглашения о вызовах: как передаются параметры в функцию?

Часто бывает удивительно, что издает компилятор. Сделайте это головоломкой, выяснив, почему, черт возьми, компилятор решил, что это будет хорошей идеей. Это вас многому научит.

Это, вероятно, также поможет вооружиться руководствами Агнера Фога , особенно инструкциями с перечислением одного. Он примерно скажет вам, насколько дорогая каждая инструкция, хотя на современных процессорах это сложнее напрямую количественно оценить. Но это поможет объяснить, почему, например, компилятор делает все возможное, чтобы избежать выполнения инструкции idiv .

Мой единственный другой совет - всегда использовать синтаксис Intel вместо AT&T. когда у тебя есть выбор. Раньше я был довольно нейтральным в этом вопросе, пока не понял, что некоторые инструкции между ними полностью различаются (например, movslq в синтаксисе AT&T - это movsxd в синтаксисе Intel). . Поскольку все руководства написаны с использованием синтаксиса Intel, просто придерживайтесь его.

Удачи!

Раньше я был довольно нейтральным по этому поводу, пока не понял, что некоторые инструкции между ними полностью различаются (например, movslq в синтаксисе AT&T - это movsxd в синтаксисе Intel). . Поскольку все руководства написаны с использованием синтаксиса Intel, просто придерживайтесь его.

Удачи!

Раньше я был довольно нейтральным по этому поводу, пока не понял, что некоторые инструкции между ними полностью различаются (например, movslq в синтаксисе AT&T - это movsxd в синтаксисе Intel). . Поскольку все руководства написаны с использованием синтаксиса Intel, просто придерживайтесь его.

Удачи!

7
ответ дан 24 November 2019 в 05:04
поделиться

Я думаю, вы хотите изучить мнемонику опкодов в формате ASCII (и их параметры), которые выводятся дизассемблером и которые понимаются (могут использоваться в качестве входных данных) ассемблера.

Подойдет любой ассемблер (например, MASM).

И / или вам может быть лучше прочитать книгу об этом (были книги, рекомендованные по SO, я не помню какие).

2
ответ дан 24 November 2019 в 05:04
поделиться

Я делал это много раз и продолжаю делать это. В этом случае, когда ваша основная цель - читать, а не писать ассемблер, я считаю, что это применимо.

Напишите свой собственный дизассемблер. Не для создания следующего величайшего дизассемблера, этот предназначен исключительно для вас. Цель - выучить набор инструкций. Изучаю ли я ассемблер на новой платформе, вспоминая ассемблер для платформы, которую когда-то знал. Но вероятность того, что вы используете ARM сейчас и не знаете достаточно ассемблера для написания кода запуска или других подпрограмм, зная, что ARM может помочь или не помочь в том, что вы пытаетесь сделать. Вторая и более важная причина использования ARM в первую очередь заключается в том, что длины инструкций имеют фиксированный размер и выровнены. Дизассемблирование инструкций переменной длины, таких как x86, может быть кошмаром для вашего первого проекта, и цель здесь - изучить набор инструкций, а не создавать исследовательский проект. Третий ARM - это хорошо сделанный набор инструкций, регистры созданы одинаковыми и не имеют индивидуальных особенностей.

Итак, вам нужно будет выяснить, с какого процессора вы хотите начать. Я предлагаю сначала msp430 или ARM, затем ARM или вторую, а затем хаос x86. Независимо от платформы, у любой платформы, которую стоит использовать, есть листы технических данных или справочные руководства для программистов, бесплатные от поставщика, которые включают набор инструкций, а также кодировку кодов операций (биты и байты машинного языка). Чтобы узнать, что делает компилятор и как писать код, с которым компилятору не приходится бороться, полезно знать несколько наборов инструкций и посмотреть, как один и тот же высокоуровневый код реализуется в каждом наборе инструкций с каждым компилятором при каждой оптимизации. настройка. Вы не хотите заниматься оптимизацией своего кода только для того, чтобы обнаружить, что вы сделали его лучше для одного компилятора / платформы, но намного хуже для каждого другого.

О, для дизассемблирования наборов инструкций переменной длины, вместо того, чтобы просто начинать с начала и дизассемблировать каждое четырехбайтовое слово линейно через память, как в случае с ARM, или каждые два байта, например, msp430 (msp430 имеет инструкции переменной длины, но вы все равно можете пройти линейно через память, если начнете с точки входа из таблицы векторов прерываний). Для переменной длины вы хотите найти точку входа на основе таблицы векторов или информации о том, как загружается процессор, и следовать коду в порядке выполнения. Вы должны полностью декодировать каждую инструкцию, чтобы знать, сколько байтов используется, тогда, если инструкция не является безусловным переходом, предположите, что следующий байт после этой инструкции является другой инструкцией. Вы также должны сохранить все возможные адреса ветвей и предположить, что это адреса начальных байтов для получения дополнительных инструкций. Однажды, когда мне это удалось, я сделал несколько проходов через двоичный файл. Начиная с точки входа, я пометил этот байт как начало инструкции, затем линейно декодировал через память, пока не попал в безусловный переход. Все цели ветвления были помечены как начальные адреса инструкции. Я сделал несколько проходов через двоичный файл, пока не нашел новых целей ветвления. Если в любое время вы найдете, скажем, 3-байтовую инструкцию, но по какой-то причине вы пометили второй байт как начало инструкции, у вас есть проблема. Если код был сгенерирован компилятором высокого уровня, этого не должно происходить, если компилятор не делает что-то злое, если код имеет рукописный ассемблер (например, старая аркадная игра), вполне возможно, что будут условные ветки, которые никогда не могут произойти например, r0 = 0 с последующим скачком, если не ноль. Возможно, вам придется вручную отредактировать их из двоичного файла, чтобы продолжить. Для ваших непосредственных целей, которые, как я предполагаю, будут на x86, я не думаю, что у вас возникнет проблема.

Я рекомендую инструменты gcc, mingw32 - простой способ использовать инструменты gcc в Windows, если x86 - ваша цель. Если не mingw32 plus, то msys - отличная платформа для создания кросс-компилятора из источников binutils и gcc (как правило, довольно просто). mingw32 имеет некоторые преимущества перед cygwin, например, значительно более быстрые программы и вы избегаете ада cygwin dll. gcc и binutils позволят вам писать на C или ассемблере и дизассемблировать ваш код, и существует больше веб-страниц, чем вы можете прочитать, показывая вам, как сделать один или все три. Если вы собираетесь делать это с набором инструкций переменной длины, я настоятельно рекомендую вам использовать набор инструментов, который включает дизассемблер. Например, сторонний дизассемблер для x86 будет сложной задачей, поскольку вы никогда не узнаете, правильно ли он разобрался. Некоторые из них также зависят от операционной системы, цель состоит в том, чтобы скомпилировать модули в двоичный формат, который содержит инструкции маркировки информации из данных, чтобы дизассемблер мог выполнять более точную работу. Другой вариант для этой основной цели - иметь инструмент, который может компилироваться непосредственно в ассемблер для вашей проверки, а затем надеяться, что при компиляции в двоичный формат он создаст те же инструкции.

Краткий (хорошо, немного короче) ответ на ваш вопрос. Напишите дизассемблер, чтобы изучить набор инструкций. Я бы начал с чего-то РИСКОГО и простого в освоении, например, ARM. Как только вы узнаете, что один набор инструкций, другие становится намного легче освоить, часто за несколько часов, с помощью третьего набора инструкций вы можете начать писать код почти сразу, используя таблицу данных / справочное руководство по синтаксису. Все процессоры, которые стоит использовать, имеют техническое описание или справочное руководство, в котором инструкции описаны вплоть до битов и байтов кодов операций. Изучите RISC-процессор, такой как ARM, и CISC, такой как x86, в достаточной степени, чтобы почувствовать различия, такие как необходимость проходить через регистры для всего или иметь возможность выполнять операции непосредственно в памяти с меньшим количеством регистров или без них. Три инструкции операнда вместо двух и т. Д. По мере настройки высокоуровневого кода компилируйте его для более чем одного процессора и сравнивайте результат. Самая важная вещь, которую вы узнаете, заключается в том, что независимо от того, насколько хорошо написан высокоуровневый код, качество компилятора и сделанный выбор оптимизации имеют огромное значение для реальных инструкций. Я рекомендую llvm и gcc (с binutils), ни один из них не создает отличный код, но они многоплатформенные и многоцелевые, и оба имеют оптимизаторы. И оба они бесплатны, и вы можете легко создавать кросс-компиляторы из исходных кодов для различных целевых процессоров.

43
ответ дан 24 November 2019 в 05:04
поделиться

Здесь много хороших ответов. Низкоуровневое программирование, сборка и т. Д. Популярны в сообществе специалистов по безопасности, поэтому стоит поискать там подсказки и подсказки, когда вы начнете. У них даже есть несколько хороших руководств, подобных этому, по сборке x86 .

0
ответ дан 24 November 2019 в 05:04
поделиться

Чтобы действительно достичь своей цели, вы можете подумать о том, чтобы начать с IDE, в которой вы находитесь. Обычно это окно дизассемблера, поэтому вы можете выполнять пошаговое выполнение кода. Обычно существует какое-то представление, позволяющее видеть регистры и заглядывать в области памяти.

Изучение неоптимизированного кода c / c ++ поможет построить ссылку на тот тип кода, который компилятор генерирует для ваших источников. У некоторых компиляторов есть какое-то зарезервированное слово ASM который позволяет вам вставлять машинные инструкции в ваш код.

Я бы посоветовал немного поиграть с такими инструментами и намочить ноги, тогда шаг вперед? вниз? к прямому ассемблерному коду на любой платформе, на которой вы работаете.

Существует много отличных инструментов, но вы можете найти это более увлекательным, чтобы сначала избежать крутой кривой обучения.

0
ответ дан 24 November 2019 в 05:04
поделиться

Это не обязательно поможет вам писать эффективный код!

Операционные коды i86 - это более или менее «устаревший» формат, который сохраняется из-за огромного объема кода и исполняемых двоичных файлов для Windows и Linux там.

Это немного похоже на то, что старые ученые писали на латыни, итальянский говорящий, такой как Галилей, писал бы на латыни, и его статью мог понять польский носитель, такой как Коперник. Это по-прежнему был наиболее эффективным способом общения, даже несмотря на то, что он не был особенно хорош в латыни, а латынь - мусорный язык для выражения математических идей.

Таким образом, компиляторы генерируют код x86 по умолчанию, а современные микросхемы читают прежние операционные коды и преобразовать то, что они видят, в параллельные инструкции Risk с переупорядочением выполнения, спекулятивным исполнением, конвейерной обработкой и т. д. плюс они в полной мере используют 32 или 64 регистра, которые на самом деле имеет процессор (в отличие от жалких 8, которые вы видите в инструкциях x86).

Теперь все оптимизирующие компиляторы знают, что это действительно происходит, поэтому они кодируют последовательности OP коды, которые, как они знают, микросхема может эффективно оптимизировать - даже если некоторые из этих последовательностей могут показаться неэффективными для программиста .asm примерно 1990 года.

В какой-то момент вам нужно признать, что разработчики компиляторов, затраченные на 10 тысяч человеко-лет, Вклады окупились, и доверяйте им.

Самый простой и легкий способ получить более эффективную среду выполнения - это купить компилятор Intel C / C ++. У них есть ниша на рынке эффективных компиляторов, и у них есть то преимущество, что они могут спрашивать разработчиков микросхем о том, что происходит внутри.

поэтому они кодируют последовательности OP-кодов, которые, как они знают, микросхема может эффективно оптимизировать - даже если некоторые из этих последовательностей покажутся неэффективными для программиста .asm примерно 1990 года.

В какой-то момент вам нужно принять, что десятки тысяч человеко-годы усилий, затраченных авторами компиляторов, окупились и, верьте им.

Самый простой и легкий способ получить более эффективную среду выполнения - это купить компилятор Intel C / C ++. У них есть ниша на рынке эффективных компиляторов, и у них есть то преимущество, что они могут спрашивать разработчиков микросхем о том, что происходит внутри.

поэтому они кодируют последовательности OP-кодов, которые, как они знают, микросхема может эффективно оптимизировать - даже если некоторые из этих последовательностей покажутся неэффективными для программиста .asm примерно 1990 года.

В какой-то момент вам нужно принять, что десятки тысяч человеко-годы усилий, затраченных авторами компиляторов, окупились и, верьте им.

Самый простой и легкий способ получить более эффективную среду выполнения - это купить компилятор Intel C / C ++. У них есть ниша на рынке эффективных компиляторов, и у них есть то преимущество, что они могут спрашивать разработчиков микросхем о том, что происходит внутри.

В какой-то момент вам нужно признать, что 10 тысяч человеко-лет усилий, затраченных авторами компиляторов, окупились, и доверять им.

Самый простой и легкий способ получить более эффективную среду выполнения - это купить компилятор Intel C / C ++. У них есть ниша на рынке эффективных компиляторов, и у них есть то преимущество, что они могут спрашивать разработчиков микросхем о том, что происходит внутри.

В какой-то момент вам нужно признать, что 10 тысяч человеко-лет усилий, затраченных авторами компиляторов, окупились, и доверять им.

Самый простой и легкий способ получить более эффективную среду выполнения - это купить компилятор Intel C / C ++. У них есть ниша на рынке эффективных компиляторов, и у них есть то преимущество, что они могут спрашивать разработчиков микросхем о том, что происходит внутри.

2
ответ дан 24 November 2019 в 05:04
поделиться

Я пойду против большинства ответов и порекомендую вариант Кнута MMIX архитектуры MIPS RISC. Он не будет так полезен с практической точки зрения, как языки ассемблера x86 или ARM (не то чтобы в наши дни они так важны для большинства реальных задач ... ;-), но он откроет вам магию последней версии Knuth. версия величайшего шедевра в области глубокого понимания алгоритмов и структур данных на низком уровне - TAOCP , «Искусство компьютерного программирования». Ссылки из двух процитированных мной URL - отличный способ начать исследовать эту возможность!

15
ответ дан 24 November 2019 в 05:04
поделиться

(Не знаю как вы, но я был в восторге от сборки)

На вашем компьютере уже установлен простой инструмент для экспериментов со сборкой.

Откройте меню «Пуск»> «Выполнить» и введите debug

debug (command)

debug is a команда в DOS, MS-DOS, OS / 2 и Microsoft Windows (только версии x86, не x64), которые запускает программу debug.exe (или DEBUG.COM в старых версиях ДОС). Отладка может действовать как ассемблер, дизассемблер или шестнадцатеричный дамп программа, позволяющая пользователям в интерактивном режиме исследовать содержимое памяти (на языке ассемблера, в шестнадцатеричной системе или ASCII), вносить изменения и выборочно запускать COM, EXE и другие типы файлов. Он также имеет несколько подкоманд, которые используются для доступа к определенному диску. секторов, портов ввода / вывода и адресов памяти. Отладка MS-DOS выполняется на уровне 16-битного процесса и поэтому ограничивается 16-битными компьютерными программами . FreeDOS Debug имеет версию "DEBUGX", поддерживающую также 32-битные программы DPMI.

Учебники:


Если вы хотите понять код, который вы видите в IDA Pro ​​(или OllyDbg ), вам нужно узнать, как структурирован скомпилированный код. Я рекомендую книгу Reversing: Secrets of Reverse Engineering

Я экспериментировал пару недель с debug , когда начал изучать сборку (15 лет назад).
Обратите внимание, что debug работает на уровне базовой машины, здесь нет команд сборки высокого уровня.

А теперь простой пример:

Дайте , чтобы начать писать код сборки - введите следующую программу - и, наконец, дайте g для ее запуска.

alt text


( INT 21 отобразить на экране символ ASCII, сохраненный в регистре DL , если Регистр AH установлен на 2 - INT 20 завершает программу)

12
ответ дан 24 November 2019 в 05:04
поделиться

Вы занимаетесь другой разработкой для Windows? На какой IDE? Если это VS, то нет необходимости в дополнительной IDE только для чтения дизассемблированного кода: отладьте свое приложение (или подключитесь к внешнему приложению), затем откройте окно дизассемблирования (в настройках по умолчанию это Alt + 8). Шагайте и наблюдайте за памятью / регистрами, как при использовании обычного кода. Вы также можете оставить окно регистров открытым (по умолчанию - Alt + 5).

Intel бесплатно предоставляет руководства , которые дают обзор базовой архитектуры (регистры, процессорные блоки и т. Д.) И полная инструкция по эксплуатации. По мере развития и усложнения архитектуры руководства по «базовой архитектуре» становятся все менее и менее удобочитаемыми. Если вам удастся достать старую версию, вы d, вероятно, есть лучшее место для начала (даже руководства P3 - они лучше объясняют ту же базовую среду выполнения).

Если вы хотите вложить деньги в книгу, здесь - это приятный вводный текст. Поищите amazon по запросу «x86», и вы получите много других. Вы можете получить несколько других указаний из другого вопроса здесь .

Наконец, вы можете получить большую пользу от чтения некоторого низкого - уровня блоги. Эти биты информации о размере байта лучше всего подходят мне лично.

Вы можете получить несколько других указаний из другого вопроса здесь .

Наконец, вы можете получить большую пользу от чтения некоторого низкого - уровня блоги. Эти биты информации о размере байта лучше всего подходят мне лично.

Вы можете получить несколько других указаний из другого вопроса здесь .

Наконец, вы можете получить большую пользу от чтения некоторого низкого - уровня блоги. Эти биты информации о размере байта лучше всего подходят мне лично.

2
ответ дан 24 November 2019 в 05:04
поделиться

Чтобы сделать то, что вы хотите, я просто взял Справочник по набору инструкций Intel (может быть, не совсем тот, который я использовал, но кажется достаточным) и несколько простых программ я написал в Visual Studio и начал перекидывать в IDAPro / Windbg. Когда я перерос свои собственные программы, мне помогло программное обеспечение по адресу crackmes .

Я предполагаю, что у вас есть некоторые базовые представления о том, как программы выполняются в Windows. Но на самом деле для чтения ассемблера есть только несколько инструкций для изучения и несколько разновидностей этих инструкций (например, есть инструкция перехода, jump имеет несколько разновидностей, таких как jump-if-equal, jump-if-ecx-is-zero , так далее). После того, как вы изучите основные инструкции, довольно просто понять суть выполнения программы. Представление графика IDA помогает, и если вы Повторно отслеживая программу с помощью Windbg, довольно просто выяснить, что делают инструкции, если вы не уверены.

Немного поиграв в подобной ситуации, я купил Hacker Disassembly Uncovered . Как правило, я избегаю книг со словом «Хакер» в названии, но мне очень понравилось, как в этой книге подробно рассказывается о том, как скомпилированный код выглядит в дизассемблированном виде. Он также занимается оптимизацией компилятора и некоторыми интересными вещами, касающимися повышения эффективности.

Все действительно зависит от того, насколько глубоко вы хотите понимать программу. Если вы проводите обратный инжиниринг цели в поисках уязвимостей, если вы пишете код эксплойта или анализируете упакованные вредоносные программы на предмет возможностей, вам потребуется больше времени на наращивание, чтобы действительно начать работу (особенно для более сложных вредоносных программ. ).

2
ответ дан 24 November 2019 в 05:04
поделиться

Знание сборки может быть полезно для отладки, но я бы не стал слишком волноваться, используя ее для оптимизации вашего кода. Современные компиляторы обычно намного лучше оптимизируют, чем люди.

0
ответ дан 24 November 2019 в 05:04
поделиться

Мы научились сборке с помощью комплекта разработчика микроконтроллера (Motorola HC12) и толстого листа данных.

0
ответ дан 24 November 2019 в 05:04
поделиться

Не по теме Я знаю, но, поскольку вы программист Windows, я не могу не думать, что это может быть более подходящим и / или лучшим использованием вашего времени для изучения MSIL. Нет, это не сборка, но, вероятно, это более актуально в нашу эпоху .NET.

0
ответ дан 24 November 2019 в 05:04
поделиться

Мой личный фаворит - NASM, в основном потому что он многоплатформенный, и он компилирует MMX, SSE, 64-бит ...

Я начал компилировать простой исходный файл C с помощью gcc и "перекодировать" инструкцию ассемблера из формата gcc в формат NASM . Затем вы можете изменить небольшие фрагменты кода и убедиться в улучшении производительности.

Документация NASM действительно полная, мне никогда не приходилось искать информацию в книгах или других источниках.

1
ответ дан 24 November 2019 в 05:04
поделиться

Одним из стандартных языков педагогического ассемблера является MIPS. Вы можете получить симуляторы MIPS (spim) и различные обучающие материалы для него.

Лично я не фанат. Мне больше нравится IA32.

1
ответ дан 24 November 2019 в 05:04
поделиться

Предложение использовать отладку - забавное, с его помощью можно проделать много интересных трюков. Однако для современной операционной системы изучение 16-битной сборки может быть немного менее полезным. Вместо этого рассмотрите возможность использования ntsd.exe. Он встроен в Windows XP (к сожалению, его заменили в Server 2003 и выше), что делает его удобным инструментом для изучения, поскольку он настолько широко доступен.

Тем не менее, исходная версия в XP страдает рядом ошибок. Если вы действительно хотите его использовать (или cdb, или windbg, которые представляют собой существенно разные интерфейсы с одинаковым синтаксисом команд и внутренней отладкой), вам следует установить бесплатный пакет инструментов отладки Windows .

Файл debugger.chm, включенный в этот пакет, особенно полезен при попытке выяснить необычный синтаксис.

Самое замечательное в ntsd то, что вы можете открыть его на любом компьютере XP, который находится рядом, и использовать его для сборки или разборки . Это делает инструмент для обучения сборке / great / X86. Например (используя cdb, поскольку он встроен в приглашение dos, в остальном он идентичен):

(ошибки символов пропущены, поскольку они не имеют отношения к делу - также, я надеюсь, что это форматирование работает, это мой первый пост)

C:\Documents and Settings\User>cdb calc

Microsoft (R) Windows Debugger Version 6.10.0003.233 X86
Copyright (c) Microsoft Corporation. All rights reserved.

CommandLine: calc
Symbol search path is: *** Invalid ***
Executable search path is:
ModLoad: 01000000 0101f000   calc.exe
ModLoad: 7c900000 7c9b2000   ntdll.dll
ModLoad: 7c800000 7c8f6000   C:\WINDOWS\system32\kernel32.dll
ModLoad: 7c9c0000 7d1d7000   C:\WINDOWS\system32\SHELL32.dll
ModLoad: 77dd0000 77e6b000   C:\WINDOWS\system32\ADVAPI32.dll
ModLoad: 77e70000 77f02000   C:\WINDOWS\system32\RPCRT4.dll
ModLoad: 77fe0000 77ff1000   C:\WINDOWS\system32\Secur32.dll
ModLoad: 77f10000 77f59000   C:\WINDOWS\system32\GDI32.dll
ModLoad: 7e410000 7e4a1000   C:\WINDOWS\system32\USER32.dll
ModLoad: 77c10000 77c68000   C:\WINDOWS\system32\msvcrt.dll
ModLoad: 77f60000 77fd6000   C:\WINDOWS\system32\SHLWAPI.dll
(f2c.208): Break instruction exception - code 80000003 (first chance)
eax=001a1eb4 ebx=7ffd6000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c90120e esp=0007fb20 ebp=0007fc94 iopl=0         nv up ei pl nz na po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000202
ntdll!DbgBreakPoint:
7c90120e cc              int     3
0:000> r eax
eax=001a1eb4
0:000> r eax=0
0:000> a eip
7c90120e add eax,0x100
7c901213
0:000> u eip
ntdll!DbgBreakPoint:
7c90120e 0500010000      add     eax,100h
7c901213 c3              ret
7c901214 8bff            mov     edi,edi
7c901216 8b442404        mov     eax,dword ptr [esp+4]
7c90121a cc              int     3
7c90121b c20400          ret     4
ntdll!NtCurrentTeb:
7c90121e 64a118000000    mov     eax,dword ptr fs:[00000018h]
7c901224 c3              ret
0:000> t
eax=00000100 ebx=7ffd6000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4
eip=7c901213 esp=0007fb20 ebp=0007fc94 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
ntdll!DbgUserBreakPoint+0x1:
7c901213 c3              ret
0:000>`

Также - пока вы играете с IDA, обязательно ознакомьтесь с IDA Pro Book Криса Игла (ссылка отключена, поскольку StackOverflow не позволяет мне размещать более двух ссылок для моего первого сообщения). Это, безусловно, лучший справочник.

3
ответ дан 24 November 2019 в 05:04
поделиться

Недавно я прошел курс компьютерных систем. Одной из тем была сборка как инструмент для связи с оборудованием.

Для меня знание сборки не было бы полным без понимания деталей того, как работают компьютерные системы. Понимание этого дает новое понимание того, почему инструкции по сборке на одной архитектуре процессора хороши, но ужасны на другой архитектуре.

Учитывая это, я склонен рекомендовать свой учебник для класса:

Компьютерные системы: точка зрения программиста .

Computer Systems:A programmer's perspective
(источник: cmu.edu )

Это действительно касается сборки x86, но книга гораздо шире. Он охватывает конвейерную структуру процессора и память в качестве кеша, систему виртуальной памяти и многое другое.

3
ответ дан 24 November 2019 в 05:04
поделиться

Некоторые ссылки могут оказаться полезными для изучения ассемблера - отображение исходного кода -

Assembly And The Art Of Debugging

Debugging - Modifying Code At Runtime

Hope you find these useful.

1
ответ дан 24 November 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: