Какое программирование?
В моем коммерческом опыте, мне не была нужна никакая усовершенствованная математика, но это в большой степени зависит от поля, в котором Вы находитесь.
Компьютерная графика требует большой суммы усовершенствованной математики. Большое академическое программирование требует усовершенствованной математики.
Настолько говорящий имеет тенденцию быть корреляция между людьми, которые способны к математике и людям, которые способны программировать.
я надеюсь, что этот слабый ответ помогает.
Есть ли причина, по которой вы не хотите использовать «-f elf» вместо «-f bin»?
Я думаю, что Linux не будет запускать двоичный файл, который не находится в ELF формат. Я не могу найти инструмент, который конвертирует плоские двоичные файлы в ELF, но вы можете обмануть, поместив информацию ELF в foo.asm, используя технику, описанную здесь :
Мы можем посмотреть на ELF спецификация и /usr/include/linux/elf.h и исполняемые файлы, созданные по стандарту инструменты, чтобы выяснить, что наши пустые Исполняемый файл ELF должен выглядеть так. Но, если вы нетерпеливый тип, вы можете просто используйте тот, который я предоставил здесь:
BITS 32 org 0x08048000 ehdr:; Elf32_Ehdr db 0x7F, "ELF", 1, 1, 1, 0; e_ident умножить на 8 дБ 0 dw 2; e_type dw 3; e_machine дд 1; e_version dd _start; e_entry дд пхдр - $$; e_phoff дд 0; e_shoff дд 0; e_flags dw ehdrsize; e_ehsize dw phdrsize; e_phentsize dw 1; e_phnum dw 0; e_shentsize dw 0; е_шнум dw 0; e_shstrndx ehdrsize equ $ - ehdr phdr:; Elf32_Phdr дд 1; p_type дд 0; p_offset dd $$; p_vaddr dd $$; p_paddr dd размер файла; p_filesz dd размер файла; p_memsz дд 5; p_flags дд 0x1000; p_align phdrsize equ $ - phdr _Начало: ; ваша программа здесь размер файла equ $ - $$
Это изображение содержит заголовок в формате ELF, идентифицируя файл как Intel 386 исполняемый файл без заголовка раздела таблица и таблица заголовков программы содержащий одну запись. Указанная запись инструктирует загрузчик программы загрузить весь файл в память (это нормальное поведение программы для включить его заголовок ELF и программу таблица заголовков в ее образе памяти) начиная с адреса памяти 0x08048000 (который является адресом по умолчанию для исполняемые файлы для загрузки) и начать выполнение кода в _start, который появляется сразу после программы таблица заголовков. Нет сегмента данных, нет .bss сегмент, без комментариев - ничего но самое необходимое.
Итак, давайте добавим в нашу небольшую программу:
; tiny.asm org 0x08048000 ; ; (как указано выше) ; _start: mov bl, 42 xor eax, eax inc eax int 0x80 размер файла equ $ - $$
и попробуйте:
$ nasm -f bin -o a.out tiny.asm $ chmod + x a.out $ ./a.out; эхо $? 42
Ядро Linux может загружать несколько различных двоичных форматов - ELF является наиболее распространенным, хотя формат a.out также довольно хорошо известен.
Поддерживаемые двоичные форматы контролируются Модули binfmt загружаются или компилируются в ядро (они находятся в разделе «Файловая система» конфигурации ядра). Существует binfmt_flat
для двоичных файлов в плоском формате uClinux BFLT, которые довольно минимальны - их можно даже сжать zlib, что позволит вам сделать ваш двоичный файл еще меньше, так что это может быть хорошим выбором. Похоже, что nasm изначально поддерживает этот формат, но довольно легко добавить необходимый заголовок вручную, как описывает Джим Льюис для ELF. Описание формата здесь .