Ассемблер в Linux

Модератор: Модераторы разделов

Аватара пользователя
Beren
Сообщения: 702
ОС: Gentoo

Ассемблер в Linux

Сообщение Beren »

Здравствуте!

Есть несколько вопросов по ассемблеру.
Будет ли MASM работать в Linux? Если нет, то где достать линуксовский транслятор?

Спасибо.
Дорогу осилит идущий
Спасибо сказали:
TwisT
Сообщения: 265
ОС: Debian

Re: Ассемблер в Linux

Сообщение TwisT »

Даров
Если ты нормально знаешь асм тебе пофиг какой транслятор юзать
Я бы порекомендовал fasm или nasm, они и винде и в *nix системах прекрасно работают
пробуй, выбирай

если собрался кодить чисто под *nix то тут дело впринципе не в траснляторе
а в особенностях асма на этих платформах, в сети полно документации по этому поводу, например
http://asm.sourceforge.net/
юниксовый транслятор as есть в каждом дистре, у тебя наверняка установлен
так что полный вперед таварищь!!!

зы: лично я юзаю fasm
Linux user #432536.
Спасибо сказали:
Аватара пользователя
tarkus
Сообщения: 38

Re: Ассемблер в Linux

Сообщение tarkus »

>> Если ты нормально знаешь асм тебе пофиг какой транслятор юзать
однако многих "нормально знающих" убивает величие GAS, который в целом хороший асм если писать обычный код

ну а для хакинга и эксплоитов - конечно nasm.
Ушел на прогулку до выхода KDE4. Всем удачи! :)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Ассемблер в Linux

Сообщение v04bvs »

GAS для ручного кодирования имхо не подходит. Он больше как прослойка для компилятора.
Спасибо сказали:
Аватара пользователя
tarkus
Сообщения: 38

Re: Ассемблер в Linux

Сообщение tarkus »

v04bvs писал(а):
09.08.2007 20:04
GAS для ручного кодирования имхо не подходит. Он больше как прослойка для компилятора.

а хотите попробовать обосновать свое утверждение?
Ушел на прогулку до выхода KDE4. Всем удачи! :)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Ассемблер в Linux

Сообщение v04bvs »

tarkus писал(а):
10.08.2007 00:12
v04bvs писал(а):
09.08.2007 20:04
GAS для ручного кодирования имхо не подходит. Он больше как прослойка для компилятора.

а хотите попробовать обосновать свое утверждение?

Нестандартный синтаксис (если например читать manual для intel процессоров, придётся всё время переводить), не очень хорошая обработка ошибок, ненужные фичи вроде генерации кода для кучи процессоров. Но это всё моё имхо, я на асме почти не писал, но nasm мне показался удобней.
Спасибо сказали:
Аватара пользователя
tarkus
Сообщения: 38

Re: Ассемблер в Linux

Сообщение tarkus »

v04bvs писал(а):
10.08.2007 06:32
я на асме почти не писал

с этого надо было сразу и начинать.

v04bvs писал(а):
10.08.2007 06:32
не очень хорошая обработка ошибок

вот тут поподробнее пожалуйста - разверните тему.

v04bvs писал(а):
10.08.2007 06:32
ненужные фичи вроде генерации кода для кучи процессоров.

то есть - то есть широкие возможности ассемблера является его недостатком?

v04bvs писал(а):
10.08.2007 06:32
Нестандартный синтаксис

религия.

v04bvs писал(а):
10.08.2007 06:32
nasm мне показался удобней.

религия.
Ушел на прогулку до выхода KDE4. Всем удачи! :)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Ассемблер в Linux

Сообщение v04bvs »

tarkus писал(а):
10.08.2007 16:25
v04bvs писал(а):
10.08.2007 06:32
я на асме почти не писал

с этого надо было сразу и начинать.

v04bvs писал(а):
10.08.2007 06:32
не очень хорошая обработка ошибок

вот тут поподробнее пожалуйста - разверните тему.

v04bvs писал(а):
10.08.2007 06:32
ненужные фичи вроде генерации кода для кучи процессоров.

то есть - то есть широкие возможности ассемблера является его недостатком?

v04bvs писал(а):
10.08.2007 06:32
Нестандартный синтаксис

религия.

v04bvs писал(а):
10.08.2007 06:32
nasm мне показался удобней.

религия.

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

PS моё мнение о gas-е оказывается произошло от http://sourceforge.net/docman/display_doc....8#section-1.1.1
можете дискутировать на эту тему с автором nasm-а, он будет более интересным собеседником :)
Спасибо сказали:
Аватара пользователя
tarkus
Сообщения: 38

Re: Ассемблер в Linux

Сообщение tarkus »

вот всегда так в нашей стране народ скрытный: поймаешь молодого партизана, и как его не пытай о секрете преданности продукту A, ничего не выпытаешь. продукт A круче, и все. :)

нет что бы сразу саксес-стори навроде:
Я не искушен в асмах, но продукт A помог мне добиться успехов в разработке продукта B (ссылка на сайт проекта/резюме/портфолио), повысив производительность в X раз <вставить особенности A способствовавшие этому>, и уменьшив затраты на поддержку в Y раз <вставить особенности A способствовавшие этому>. Работа с продуктом A оставила следующие впечатления: <вставить мнение о сильных/слабых сторонах A, чем он лучше продуктов C, D, E..>
Ушел на прогулку до выхода KDE4. Всем удачи! :)
Спасибо сказали:
Аватара пользователя
Red User
Сообщения: 229
ОС: Debian

Re: Ассемблер в Linux

Сообщение Red User »

v04bvs писал(а):
10.08.2007 06:32
Нестандартный синтаксис (если например читать manual для intel процессоров, придётся всё время переводить)


Если команда не изменяет ни один из операндов, то не очевидно, каким должен быть их порядок. В некоторых случаях он меняется на противоположный, а в некоторых нет.
А ведь когда-то не боялись мы программы любой,
И с одним лишь debug'ом выходили на бой,
И искусно написанный вирус встречали как брата
Спасибо сказали:
Аватара пользователя
innkeeper
Сообщения: 110

Re: Ассемблер в Linux

Сообщение innkeeper »

NASM оч. легко выучить если уже знаете MASM. Однако это не означает, что проги написанные на MASM легко портировать на NASM и наоборот. Покрайней мере я за это браться не стал :-)

AT&T синтаксис многим людям кажеться более сложным и не удобным. Некоторым наоборот -) Когда я сдавал экзамен по ассемблеру, а нам впринципе преподавали MASM, то выбрал я NASM и мою линуховых Лаптоп, который я на экзамен и принёс.

У нас позиция была такая, пиши как хочешь, на чём хочешь, используй что-то готовое сколько хочешь (однако ты должен был ответить на вопросы по коду) - но напиши задачку меньше чем за 15 минут!

Макросы NASM мне очень помогли сделать подобие сишных функций (если память мне не изменяет, то макросы у nasm помощнее MASM-a). Как следствие: препод, привыкший к синтаксису MASM, не очень сильно понял мой код. Условие того, что шрифт в консоли у меня маленький привёл к тому, что препод просто вообще ничего не стал спрашивать по коду, однако убедился, что на asm синтаксис более менее похож =)

P.S. вот такая вот маленькая саксес стори -)
P.P.S. кста.. gdb помоему только в intel-вском формате дизассемблит или я ошибаюсь?
Спасибо сказали:
Аватара пользователя
innkeeper
Сообщения: 110

Re: Ассемблер в Linux

Сообщение innkeeper »

Ах да. Вот что мне ещё ОЧЕНЬ понравилось в NASM так это вложенные метки

Код: Выделить всё

_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

Сообщение tarkus »

innkeeper писал(а):
21.08.2007 18:37
P.P.S. кста.. gdb помоему только в intel-вском формате дизассемблит или я ошибаюсь?

учитывая что он базируется на 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

Сообщение rthsobakas »

скиньте пару ссылок где можно скачать фасм и насм для линукса... я скачал фасм,но он для винды оказался, потом искал ещё, но не нашел.
Спасибо сказали:
pas
Сообщения: 597
Статус: маньяк
ОС: Gentoo

Re: Ассемблер в Linux

Сообщение pas »

www.wasm.ru Вам поможет. Там есть ссылка на сайт компилятора, очень хороший форум, в том числе есть ветка по никсам. Есть статьи по программированию на асме под никсы.
Спасибо сказали:
beep_boop
Сообщения: 3
ОС: Linux

Re: Ассемблер в Linux

Сообщение beep_boop »

pas писал(а):
17.10.2007 07:26
Есть статьи по программированию на асме под никсы.

Аж 2 штуки. В плане к-ва и качества документации по ассемблеру под юникс системы однозначно намного лучше http://asm.sourceforge.net/ , он же http://linuxassembly.org - и статей больше и охват тем шире ;)
Еще есть список рассылки linux-assembly@vger.kernel.org - там тоже есть полезная информация
Slackware 12.0
Спасибо сказали: