Ассемблер в Linux
Модератор: Модераторы разделов
-
Beren
- Сообщения: 702
- ОС: Gentoo
Ассемблер в Linux
Здравствуте!
Есть несколько вопросов по ассемблеру.
Будет ли MASM работать в Linux? Если нет, то где достать линуксовский транслятор?
Спасибо.
Есть несколько вопросов по ассемблеру.
Будет ли MASM работать в Linux? Если нет, то где достать линуксовский транслятор?
Спасибо.
Дорогу осилит идущий
-
TwisT
- Сообщения: 265
- ОС: Debian
Re: Ассемблер в Linux
Даров
Если ты нормально знаешь асм тебе пофиг какой транслятор юзать
Я бы порекомендовал fasm или nasm, они и винде и в *nix системах прекрасно работают
пробуй, выбирай
если собрался кодить чисто под *nix то тут дело впринципе не в траснляторе
а в особенностях асма на этих платформах, в сети полно документации по этому поводу, например
http://asm.sourceforge.net/
юниксовый транслятор as есть в каждом дистре, у тебя наверняка установлен
так что полный вперед таварищь!!!
зы: лично я юзаю fasm
Если ты нормально знаешь асм тебе пофиг какой транслятор юзать
Я бы порекомендовал fasm или nasm, они и винде и в *nix системах прекрасно работают
пробуй, выбирай
если собрался кодить чисто под *nix то тут дело впринципе не в траснляторе
а в особенностях асма на этих платформах, в сети полно документации по этому поводу, например
http://asm.sourceforge.net/
юниксовый транслятор as есть в каждом дистре, у тебя наверняка установлен
так что полный вперед таварищь!!!
зы: лично я юзаю fasm
Linux user #432536.
-
tarkus
- Сообщения: 38
Re: Ассемблер в Linux
>> Если ты нормально знаешь асм тебе пофиг какой транслятор юзать
однако многих "нормально знающих" убивает величие GAS, который в целом хороший асм если писать обычный код
ну а для хакинга и эксплоитов - конечно nasm.
однако многих "нормально знающих" убивает величие GAS, который в целом хороший асм если писать обычный код
ну а для хакинга и эксплоитов - конечно nasm.
Ушел на прогулку до выхода KDE4. Всем удачи! :)
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Ассемблер в Linux
GAS для ручного кодирования имхо не подходит. Он больше как прослойка для компилятора.
-
tarkus
- Сообщения: 38
Re: Ассемблер в Linux
а хотите попробовать обосновать свое утверждение?
Ушел на прогулку до выхода KDE4. Всем удачи! :)
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Ассемблер в Linux
Нестандартный синтаксис (если например читать manual для intel процессоров, придётся всё время переводить), не очень хорошая обработка ошибок, ненужные фичи вроде генерации кода для кучи процессоров. Но это всё моё имхо, я на асме почти не писал, но nasm мне показался удобней.
-
tarkus
- Сообщения: 38
Re: Ассемблер в Linux
с этого надо было сразу и начинать.
вот тут поподробнее пожалуйста - разверните тему.
то есть - то есть широкие возможности ассемблера является его недостатком?
религия.
религия.
Ушел на прогулку до выхода KDE4. Всем удачи! :)
-
v04bvs
- Сообщения: 636
- ОС: Debian GNU/Linux
Re: Ассемблер в Linux
Вы меня конечно извините, дискутировать на тему, в которой я разбираюсь слабо, я не буду. Я высказал свои мысли, и вполне допускаю, что они не верны. Но информация лишней не бывает, а автору нужна была именно она.
PS моё мнение о gas-е оказывается произошло от http://sourceforge.net/docman/display_doc....8#section-1.1.1
можете дискутировать на эту тему с автором nasm-а, он будет более интересным собеседником
-
tarkus
- Сообщения: 38
Re: Ассемблер в Linux
вот всегда так в нашей стране народ скрытный: поймаешь молодого партизана, и как его не пытай о секрете преданности продукту A, ничего не выпытаешь. продукт A круче, и все. 
нет что бы сразу саксес-стори навроде:
Я не искушен в асмах, но продукт A помог мне добиться успехов в разработке продукта B (ссылка на сайт проекта/резюме/портфолио), повысив производительность в X раз <вставить особенности A способствовавшие этому>, и уменьшив затраты на поддержку в Y раз <вставить особенности A способствовавшие этому>. Работа с продуктом A оставила следующие впечатления: <вставить мнение о сильных/слабых сторонах A, чем он лучше продуктов C, D, E..>
нет что бы сразу саксес-стори навроде:
Я не искушен в асмах, но продукт A помог мне добиться успехов в разработке продукта B (ссылка на сайт проекта/резюме/портфолио), повысив производительность в X раз <вставить особенности A способствовавшие этому>, и уменьшив затраты на поддержку в Y раз <вставить особенности A способствовавшие этому>. Работа с продуктом A оставила следующие впечатления: <вставить мнение о сильных/слабых сторонах A, чем он лучше продуктов C, D, E..>
Ушел на прогулку до выхода KDE4. Всем удачи! :)
-
Red User
- Сообщения: 229
- ОС: Debian
Re: Ассемблер в Linux
Если команда не изменяет ни один из операндов, то не очевидно, каким должен быть их порядок. В некоторых случаях он меняется на противоположный, а в некоторых нет.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
-
innkeeper
- Сообщения: 110
Re: Ассемблер в Linux
NASM оч. легко выучить если уже знаете MASM. Однако это не означает, что проги написанные на MASM легко портировать на NASM и наоборот. Покрайней мере я за это браться не стал :-)
AT&T синтаксис многим людям кажеться более сложным и не удобным. Некоторым наоборот -) Когда я сдавал экзамен по ассемблеру, а нам впринципе преподавали MASM, то выбрал я NASM и мою линуховых Лаптоп, который я на экзамен и принёс.
У нас позиция была такая, пиши как хочешь, на чём хочешь, используй что-то готовое сколько хочешь (однако ты должен был ответить на вопросы по коду) - но напиши задачку меньше чем за 15 минут!
Макросы NASM мне очень помогли сделать подобие сишных функций (если память мне не изменяет, то макросы у nasm помощнее MASM-a). Как следствие: препод, привыкший к синтаксису MASM, не очень сильно понял мой код. Условие того, что шрифт в консоли у меня маленький привёл к тому, что препод просто вообще ничего не стал спрашивать по коду, однако убедился, что на asm синтаксис более менее похож =)
P.S. вот такая вот маленькая саксес стори -)
P.P.S. кста.. gdb помоему только в intel-вском формате дизассемблит или я ошибаюсь?
AT&T синтаксис многим людям кажеться более сложным и не удобным. Некоторым наоборот -) Когда я сдавал экзамен по ассемблеру, а нам впринципе преподавали MASM, то выбрал я NASM и мою линуховых Лаптоп, который я на экзамен и принёс.
У нас позиция была такая, пиши как хочешь, на чём хочешь, используй что-то готовое сколько хочешь (однако ты должен был ответить на вопросы по коду) - но напиши задачку меньше чем за 15 минут!
Макросы NASM мне очень помогли сделать подобие сишных функций (если память мне не изменяет, то макросы у nasm помощнее MASM-a). Как следствие: препод, привыкший к синтаксису MASM, не очень сильно понял мой код. Условие того, что шрифт в консоли у меня маленький привёл к тому, что препод просто вообще ничего не стал спрашивать по коду, однако убедился, что на asm синтаксис более менее похож =)
P.S. вот такая вот маленькая саксес стори -)
P.P.S. кста.. gdb помоему только в intel-вском формате дизассемблит или я ошибаюсь?
-
innkeeper
- Сообщения: 110
Re: Ассемблер в Linux
Ах да. Вот что мне ещё ОЧЕНЬ понравилось в NASM так это вложенные метки
т.е. ".loop" локальная метка для "_write_num". Не находясь в метке "_write_num", к ".loop" можно обращаться как "_write_num.loop". Мне это помогло сделать код очень понятным для себя.
Однако я так и не узнал как ловить такие метки в gdb
Код: Выделить всё
_write_num:; {{{
mov ecx,0
mov ebx,10
cmp eax,ebx
js .b ; we have only one digit, print it!
push eax ; before we should count number of digits
.loop1
div ebx
mov edx,0
add ecx,1
cmp eax,ebx
jns .loop1
; we have counted number of digits, let's write them
pop eax ; restore initial value
push ecx ; store number of digits
.loop2
div ebx
add edx,'0'
mov [_write_num_buf+ecx],dl
mov edx,0
sub ecx,1
cmp eax,ebx
jns .loop2
pop ecx ; restore number of digits
.b: ; writing the last or only digit
add ecx,1
add eax,'0'
mov [_write_num_buf],al
mov ebx,eax
write _write_num_buf,ecx
ret
; }}}
_т.е. ".loop" локальная метка для "_write_num". Не находясь в метке "_write_num", к ".loop" можно обращаться как "_write_num.loop". Мне это помогло сделать код очень понятным для себя.
Однако я так и не узнал как ловить такие метки в gdb
-
tarkus
- Сообщения: 38
Re: Ассемблер в Linux
учитывая что он базируется на BFD это было бы предательством:
Код: Выделить всё
(gdb) disassemble
Dump of assembler code for function main:
0x08048374 <main+0>: lea 0x4(%esp),%ecx
0x08048378 <main+4>: and $0xfffffff0,%esp
0x0804837b <main+7>: pushl 0xfffffffc(%ecx)
0x0804837e <main+10>: push %ebp
0x0804837f <main+11>: mov %esp,%ebp
0x08048381 <main+13>: push %ecx
0x08048382 <main+14>: sub $0x4,%esp
0x08048385 <main+17>: movl $0x8048460,(%esp)
0x0804838c <main+24>: call 0x80482b0
0x08048391 <main+29>: mov $0x0,%eax
0x08048396 <main+34>: add $0x4,%esp
0x08048399 <main+37>: pop %ecx
0x0804839a <main+38>: pop %ebp
0x0804839b <main+39>: lea 0xfffffffc(%ecx),%esp
0x0804839e <main+42>: ret
0x0804839f <main+43>: nop
End of assembler dump.но gdb, как и objdump, на редкость непригодная утилита, когда речь заходит о программе без символов. а вот в комплект NASM входит утилита ndisasm, которая отлично работает на чем угодно.
Я думаю главной проблемой является невозможность выбора между AT&T и Intel форматами.
Ушел на прогулку до выхода KDE4. Всем удачи! :)
-
rthsobakas
- Сообщения: 366
- Статус: ушел и больше не вернусь!!!
- ОС: Suse11.1
Re: Ассемблер в Linux
скиньте пару ссылок где можно скачать фасм и насм для линукса... я скачал фасм,но он для винды оказался, потом искал ещё, но не нашел.
-
pas
- Сообщения: 597
- Статус: маньяк
- ОС: Gentoo
Re: Ассемблер в Linux
www.wasm.ru Вам поможет. Там есть ссылка на сайт компилятора, очень хороший форум, в том числе есть ветка по никсам. Есть статьи по программированию на асме под никсы.
-
beep_boop
- Сообщения: 3
- ОС: Linux
Re: Ассемблер в Linux
Аж 2 штуки. В плане к-ва и качества документации по ассемблеру под юникс системы однозначно намного лучше http://asm.sourceforge.net/ , он же http://linuxassembly.org - и статей больше и охват тем шире
Еще есть список рассылки linux-assembly@vger.kernel.org - там тоже есть полезная информация
Slackware 12.0