Всем привет.
Не нашел на форуме подобной темы, поэтому решил написать сам.
Вижу, что многие начинающие ассемблерщики-линуксойды задают приблизительно одинаковые вопросы. Связанны они в основном с путаницей в различных синтаксисах этого языка. В ВУЗах преподают в основном MASM, но мы-то, юниксойды, знаем, что этот ассемблер от лукавого (:
Различных ассемблеров много, притом, что язык (даже для различных ОС) один, но есть отличия в оформении кода - синаксисе. Так же не надо забывать, что это аппаратнозависимый язык.
На русском информация есть. Ее немного, но все же найти можно. Естественно львиная доля на английском, и если хотите не просто познакомиться с assembler, а действительно научиться программировать под UNIX/Linux, то придется читать документацию на английском. Если с ним проблем нет, то можно очень много интересного найти на англоязычных asm-форумах.
Кто и зачем учит ASSEMBLER сегодня?
Очень популярный вопрос. Одни считают, что на этом языке уже 20 лет никто ничего не пишет, и изучение его сегодня является бессмысленным занятием. Другие считают, что его должен знать каждый хороший программист. Истина, как говорится, всегда посередине.
Системным программистам безусловно пригодится знание ассемблера. Оно поможет видеть структуру и принципы работы программ и ОС. Но это зависит от того, чем именно занимается системный программист. Без него невозможно программирование микроконтроллеров и создание компиляторов. С/C++ и прочие, это уже "оболочки" над ассемблером.
В архитекрурнозависимых частях ядра без ассемблера так же не обойтись:
Код: Выделить всё
find /usr/src/linux/ -iname *.sМоё имхо - это процесс загрузки и безопасность. Мне интересны обе эти темы и поэтому я изучаю assembler.
Без ассемблера не написать загрузчик ОС, не перевести 32-битный процессор в защищённый режим, который стартует в реальном 16-битном режиме.
Так же, именно через знание ассемблера лежит дорога к пониманию работы памяти - самому слабому участку программы, с точки зрения безопасности, т.е. без ассемблера нельзя написать эксплойт/шелл_код.
Советую так же заглянть сюда и в вики. Там есть список недостатков и достоинств асма.
==========================================
* GNU Assembler *
License: GPL => OpenSource
OS: UNIX/Linux
Использует так же AT&T синтаксис.
as :: wiki
as :: home
as :: manual
as :: howto
AT&T Syntax versus Intel Syntax
==========================================
* NASM *
License: BSD => OpenSource
OS: Windows, Linux, Mac OS X, DOS, OS/2
The Netwide Assembler project provides cool i386 assembler, written in C, that should be modular enough to eventually support all known syntaxes and object formats.
В числе активных разработчиков далеко небезызвестный H. Peter Anvin
Поддерживаемые объектные фотрматы: bin, aout, coff, elf, as86, obj (DOS), win32, rdf.
nasm :: wiki
nasm :: home
nasm :: forum
nasm :: sourceforge.net
PC Assembly Tutorial
==========================================
* FASM *
License: BSD => OpenSource
OS: Windows, DOS, Linux, Unix-like
FASM (flat assembler) is a fast, efficient 80x86 assembler that runs in 'flat real mode'. Unlike many other 80x86 assemblers, FASM only requires the source code to include the information it really needs. It is written in itself and is very small and fast.
fasm :: wiki
fasm :: home
fasm :: forum
==========================================
* YASM *
License: BSD => OpenSource
OS: Windows, DOS, Linux, Mac OS X, Unix-like
YASM is a complete rewrite of the NASM assembler under the GNU GPL (some portions are under the "new" BSD License). It is designed from the ground up to allow for multiple syntaxes to be supported (eg, NASM, TASM, GAS, etc.) in addition to multiple output object formats. Another primary module of the overall design is an optimizer module.
yasm :: wiki
==========================================
* TDASM *
License: GPL => OpenSource
OS: UNIX/Linux
The Table Driven Assembler (TDASM) is a free portable cross assembler for any kind of assembly language. It should be possible to use it as a compiler to any target microprocessor using a table that defines the compilation process.
tdasm :: home
==========================================
О МASM и TASM я думаю писать не стоит, ибо it is evil proprietary software, к тому же нет версий под UNIX/Linux.
*** Общая информация по ASSEMBLER ***
http://wasm.ru -- на сайте находятся различные исходники на ассемблере (как самом понятном и продвинутом языке
Это пожалуй центральный русскоязычный asm-портал. Есть forum (UNIX/Linux). Большое количество статей, в том числе и для юниксойдов.
http://programmersforum.ru -- еще один форум программистов с asm-разделом.
http://www.int80h.org/ -- On the Intel family of microprocessors int 80h is the assembly language op code for interrupt 80h. This is the syscall interrupt on a typical Intel-based Unix system. It allows application programmers to obtain system services from the Unix/Linux kernel.
http://www.thefreecountry.com/compilers/assemblers.shtml -- Free Assemblers, Linkers and Object Module Librarians.
http://www.lxhp.in-berlin.de/lhplinks.html#top -- Assembly Programming
http://www.linuxasmtools.net/ -- If you enjoy assembler, this site will provide tools and reference materials for Linux and X86 terminal/console programs.
http://www.janw.dommel.be/ -- various source code examples
http://asm.sourceforge.net/ -- If you are looking for information on assembly programming under UNIX-like operating systems (Linux/BSD/BeOS/etc), this is the right place to be. Here you can find various resources, ranging from tutorials and documentation, to actual programs written in assembly language. As time passes, we will try to provide as much information on the subject as possible, so stay tuned.
http://www.xs4all.nl/~smit/docs.htm#asm -- Assembly Tutorial
http://www.asmcommunity.net -- This community started in the late 90's in order to distribute and discuss information related to Assembly Language programming. There are forum and wiki.
http://sandpile.org/ -- The world's leading source for pure technical x86 processor information.
http://homepage.mac.com/randyhyde/webster....xAsm/index.html -- Linux Assembly Language Programming.
http://www.faqs.org/faqs/assembly-language -- x86 Assembly Language FAQ
*** КНИГИ ***
"Write Great Code: Understanding the machine" Randall Hyde
"The art of assembly language" Randall Hyde
*** Мануалы / Статьи ***
Linux assemblers: A comparison of GAS and NASM
Ассемблер в Linux для программистов C (AT&T синтаксис)
Happy hacking!
p.s. Критика, сообщения об ошибках, опечатках и т.д. приветствуются. Я буду редактировать это сообщение и добавлять информацию.