привет всем! подскажите какой нибудь мануал по AT&T синтаксису (кроме этого http://security.opennet.ru/docs/RUS/gas/gas.html). у мня есть вопрос - как объявить массив 512 байт? пробовал m:.byte dup(512), m:.byte 512 dup(?) и ещё по-другому. в конце концов скомплилось так: m:.byte dup. только непонятен смысл этой записи. и ещё - как компилить проги под винду? есть такая прога: Код (Text): .text .globl main main: pushl $msg call puts addl $0x4, %esp ret .data msg: .string "blah blah blah\0" у меня стоит mingw + binutils. компилю так: as -o prog.o prog.asm gcc -o prog.exe prog.o as прошёл нормально. вторая команда выдаёт: prog.o:fake.text+0x6): undefined reference to `puts' /mingw/lib/libmingw32.a(main.o):main.c.text+0x104): undefined reference to `_W inMain@16' collect2: ld returned 1 exit status под линуксом усё работает.
Из книги Programming From The Ground Up Код (Text): .section .bss .lcomm buffer, 512 Кстати, книгу можно спокойно скачать в интернете - не варез.
creeper, спасибо. работает. насчёт книги, автор - Barlett J.? если можешь, кинь ссылку плиз. rei3er, спасибо. тоже работает . а как обращаться к этому куску памяти? r90, спасибо. поставил _puts и поковырялся с линкером. вот так скомпилилось: ld -o prog.exe prog.o -L "/mingw/lib" -lmsvcrt теперь вопрос - можно ли использовать функции линукса? например, open(). или я слишком много хочу? prog.o:fake.text+0x15): undefined reference to `open' мож под cygwin сработает? какието пакеты нужно поставить?
pluton Да, автор Jonathan Bartlett. http://download.savannah.gnu.org/releases/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
creeper, спасибо за книгу rei3er, спасибо за объяснение ещё вопросики: как называется аналог sizeof? как объявить константу (типа EQU)? как объявить неинициализированную переменную (var1: .long ?) ?
в GAS нет того, к чему он применяется никак либо пользоваться #define и компилировать GCC Код (Text): .skip 4
creeper это не то тут идет определение символа, а не константы т. е в таблице символов будет создан соответствующий элемент хотя семантика использования (подстановка) сохраняется
Код (Text): .equ O_RDONLY, 0 вот это сработало, но включение в код увеличило размер исполняемого файла можно както объявить символ локальным или как юзать #define? всё, что с решётки - это коммент насчёт неинициализированной переменной. нужно было объявить fd: .long ? я выкрутился так: .lcomm fd, 4 вариант .skip 4 // <- опять без метки зы. если что, извините, что я всё у вас спрашиваю. пока нет времени разбираться с манами
читай посты я ведь писал Код (Text): #define PAGE_SIZE 0x1000 ... movl $PAGE_SIZE, %eax ... компилировать так <файл> должен иметь расширение .S
pluton Константы в GAS обьявляются проще простого: myconstant = value Потом к имени константы нужно не забывать добавлять суффикс ($ для integer). Пример: myconst = 1 pushl $myconst
это не константы, а символы для каждого из них создается элемент таблицы символов с индексом секции SHN_ABS