в массив занести от символы A до Z, и печать его до завершающего символа X. Под NASM, i386.
За макросы в файле stud_io.inc не беспокойтесь (вот он), используются только PUTCHAR (думаю логично для чего) и FINISH (просто корректно завершает программу).
пытаешься обратиться к памяти, доступ к которой тебе не разрешен
Зачем две одинаковых секции сделал? Подозреваю, что первая секция завершается: mov byte [edi], 10 После чего - идут нули, и получаешь seg fault
Спасибо, понял в чём проблема (http://0x0.st/-wWp.diff).
Две секции чтобы отделить визуально, потаённого смысла нет.
Нельзя так использовать директиву section
;================ я делаю так обычно
Потому что она предназначена для определения секции Тебя, наверное, компилятор, или линковщик спас. Не понимаю, как это вообще пропустили
секции нужны чтоб делить байты в памяти по предназначению, а не чтоб у тя текстовый файл красива выглядел
элементарно, секцию можно сколько угодно раз писать, и они линкуются в порядке появления, при трансляции в объектник вроде как так же, есть ещё такие хитрые файлы crt*.o в одном объявлен пролог функции после чего секия резко обрывается, в другом файле эпилог, по умолчанию между ними линкер вставляет crtbegin.o и crtend.o, но это так лирическое отступление...
Не нужно сколько угодно раз объявлять секции
я так так делаю и всё работает, но функции у меня не разрываются в этих местах
Ужасно! Но я ещё не видел, чтоб ты так делал Со структурой ELF не знаком, но в PE секция это тонна байт (Да и в ELF, уверен, не мало)
если одну и ту же секцию объявить несколько раз асм их склеит в одну в выходном объектнике, линкер сделает аналогично, если скрипт тривиальный
Как это одну и ту же? Секции нельзя объявить одни и те же. Они могут иметь одно и то же имя, одни и те же флаги, и всё равно они имеют право быть в исполняемом файле. Ну если только за тебя подтирает компилятор, тогда да, можно и смириться с этим (хотя я всё равно не улавливаю смысл, почему компилятор ограничивает в определении секций)
.section создаёт новую секцию только в случае когда такой секции ещё нет, в остальных случаях он дописывает существующую, и вроде ругается если флаги перепутаешь
Там используется просто "section" Ну ладно, суть я уловил - компилятор не даёт адекватно самому построить структуру исполняемого файла, поэтому теперь можно фигачить в коде кучу секций, и нормалёк.
две секции с одинаковыми именами, это в любом случае не нормально, но в исходнике нормальная ситуация, это означает просто запись в одну и ту же секцию
Да вот как раз наоборот В исходнике - ситуация ненормальная, когда определено много секций, причём эти секции бессмысленные, и всунуты просто ради красоты (хотя даже не вижу здесь красоты, просто бессмысленно). А вот в исполняемом файле - нормально, и сам так делаю: section 'entu' data readable writeable ; data section 'entu' code readable writeable ; code Когда хочу пометить файл, или выпендриться тем, что FASM мне даёт это делать))
А ты смотрел результат в хексе, сколько по факту секций было в бинаре?
И они были с одинаковыми названиями?
Обсуждают сегодня