Size: a a a

Ассемблер

2021 September 07

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
пытаешься обратиться к памяти, доступ к которой тебе не разрешен
источник

E

Entusiast in Ассемблер
Зачем две одинаковых секции сделал?
Подозреваю, что первая секция завершается:

mov byte [edi], 10

После чего - идут нули, и получаешь seg fault
источник

k

k4leg in Ассемблер
Спасибо, понял в чём проблема (http://0x0.st/-wWp.diff).
источник

k

k4leg in Ассемблер
Две секции чтобы отделить визуально, потаённого смысла нет.
источник

E

Entusiast in Ассемблер
Нельзя так использовать директиву section
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
;================

я делаю так обычно
источник

k

k4leg in Ассемблер
Почему?
источник

E

Entusiast in Ассемблер
Потому что она предназначена для определения секции
Тебя, наверное, компилятор, или линковщик спас. Не понимаю, как это вообще пропустили
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
секции нужны чтоб делить байты в памяти по предназначению, а не чтоб у тя текстовый файл красива выглядел
источник

d

disba1ancer in Ассемблер
элементарно, секцию можно сколько угодно раз писать, и они линкуются в порядке появления, при трансляции в объектник вроде как так же, есть ещё такие хитрые файлы crt*.o в одном объявлен пролог функции после чего секия резко обрывается, в другом файле эпилог, по умолчанию между ними линкер вставляет crtbegin.o и crtend.o, но это так лирическое отступление...
источник

E

Entusiast in Ассемблер
Не нужно сколько угодно раз объявлять секции
источник

d

disba1ancer in Ассемблер
я так так делаю и всё работает, но функции у меня не разрываются в этих местах
источник

E

Entusiast in Ассемблер
Ужасно!
Но я ещё не видел, чтоб ты так делал
Со структурой ELF  не знаком, но в PE секция это тонна байт
(Да и в ELF, уверен, не мало)
источник

d

disba1ancer in Ассемблер
если одну и ту же секцию объявить несколько раз асм их склеит в одну в выходном объектнике, линкер сделает аналогично, если скрипт тривиальный
источник

E

Entusiast in Ассемблер
Как это одну и ту же?
Секции нельзя объявить одни и те же. Они могут иметь одно и то же имя, одни и те же флаги, и всё равно они имеют право быть в исполняемом файле.
Ну если только за тебя подтирает компилятор, тогда да, можно и смириться с этим (хотя я всё равно не улавливаю смысл, почему компилятор ограничивает в определении секций)
источник

d

disba1ancer in Ассемблер
.section создаёт новую секцию только в случае когда такой секции ещё нет, в остальных случаях он дописывает существующую, и вроде ругается если флаги перепутаешь
источник

E

Entusiast in Ассемблер
Там используется просто "section"
Ну ладно, суть я уловил - компилятор не даёт адекватно самому построить структуру исполняемого файла, поэтому теперь можно фигачить в коде кучу секций, и нормалёк.
источник

d

disba1ancer in Ассемблер
две секции с одинаковыми именами, это в любом случае не нормально, но в исходнике нормальная ситуация, это означает просто запись в одну и ту же секцию
источник

E

Entusiast in Ассемблер
Да вот как раз наоборот
В исходнике - ситуация ненормальная, когда определено много секций, причём эти секции бессмысленные, и всунуты просто ради красоты (хотя даже не вижу здесь красоты, просто бессмысленно).
А вот в исполняемом файле - нормально, и сам так делаю:

section 'entu' data readable writeable
; data

section 'entu' code readable writeable
; code

Когда хочу пометить файл, или выпендриться тем, что FASM мне даёт это делать))
источник

d

disba1ancer in Ассемблер
А ты смотрел результат в хексе, сколько по факту секций было в бинаре?
источник