169 похожих чатов

Http://0x0.St/-WWB.Asm Можете подсказать почему завершается с segmentation fault? Задачка простая —

в массив занести от символы A до Z, и печать его до завершающего символа X. Под NASM, i386.
За макросы в файле stud_io.inc не беспокойтесь (вот он), используются только PUTCHAR (думаю логично для чего) и FINISH (просто корректно завершает программу).

22 ответов

15 просмотров

пытаешься обратиться к памяти, доступ к которой тебе не разрешен

Зачем две одинаковых секции сделал? Подозреваю, что первая секция завершается: mov byte [edi], 10 После чего - идут нули, и получаешь seg fault

k4leg- Автор вопроса
k4leg- Автор вопроса
Entusiast
Зачем две одинаковых секции сделал? Подозреваю, чт...

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

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

Нельзя так использовать директиву section

k4leg
Почему?

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

k4leg
Почему?

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

Entusiast
Потому что она предназначена для определения секци...

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

disba1ancer
элементарно, секцию можно сколько угодно раз писат...

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

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

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

disba1ancer
я так так делаю и всё работает, но функции у меня ...

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

Entusiast
Ужасно! Но я ещё не видел, чтоб ты так делал Со ст...

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

disba1ancer
если одну и ту же секцию объявить несколько раз ас...

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

Entusiast
Как это одну и ту же? Секции нельзя объявить одни ...

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

disba1ancer
.section создаёт новую секцию только в случае когд...

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

Entusiast
Там используется просто "section" Ну ладно, суть я...

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

disba1ancer
две секции с одинаковыми именами, это в любом случ...

Да вот как раз наоборот В исходнике - ситуация ненормальная, когда определено много секций, причём эти секции бессмысленные, и всунуты просто ради красоты (хотя даже не вижу здесь красоты, просто бессмысленно). А вот в исполняемом файле - нормально, и сам так делаю: section 'entu' data readable writeable ; data section 'entu' code readable writeable ; code Когда хочу пометить файл, или выпендриться тем, что FASM мне даёт это делать))

Entusiast
Да вот как раз наоборот В исходнике - ситуация нен...

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

Entusiast
Ну две

И они были с одинаковыми названиями?

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
Карта сайта