Size: a a a

Ассемблер

2021 April 23

d

disba1ancer in Ассемблер
Какую задачу решаешь?
источник

A

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

A

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

C

Cofeefee in Ассемблер
Коллеги, а подскажите, как в FASM объединять два сегмента?

Суть дела:
Есть инклюд (1.asm) с кодом, в которых есть секции
section '.text' code readable executable
с кодом
section '.data' data readable writeable
и с данными
и есть второй инклюд (2.asm)
с секцией кода и секцией данных, относящейся к 2.asm

когда FASM собирает файл
include 1.asm
include 2.asm

он делает в PE две секции кода и две секции данных. (.text, .text) и (.data, .data)
Я хочу чтобы код из секции .text в одной секции в PE, а данные тоже в одной, т.е объединение секций с одинаковыми именами
Как?
источник

A

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

C

Cofeefee in Ассемблер
Вот именно, некрасиво
источник

C

Cofeefee in Ассемблер
Придётся в COFF код из FASM выгонять и линковать микрософтовским линкером (
источник

d

disba1ancer in Ассемблер
В плюсах красиво, а тут нет, ну и ну...
источник

C

Cofeefee in Ассемблер
У меня инклюдов 30 шт, и получается что PE в 60 секций (((
источник

C

Cofeefee in Ассемблер
И ещё:
вложенные if в FASM
есть код:
Флаг DEBUGTRACEALLSHITCODE является вложенным флагом DEBUG

if defined DEBUG
 lalalala....
 if defined DEBUGTRACEALLSHITCODE
   blblblb
 end if
end if

то такой nested if не проходит, приходится извращаться
match=TRUE, DEBUG{
 lalalala
 if defined DEBUGTRACEALLSHITCODE
   blblblb
 end if
}

есть какой-то другой, более оптимальный путь?
источник

C

Cofeefee in Ассемблер
все флаги - флаги условной компиляции
источник

A

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

data1.inc
code1.inc

data2.inc
code2.inc


.data
; данные основного модуля
include data1.inc
include data2.inc

.code
;код омновного модуля
include code1.inc
include code2.inc


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

тупо по велосипедостроительски
источник

C

Cofeefee in Ассемблер
У меня так и сделано и приходится один инклюд бить на 1.asm.code< 1.asm.data
источник

s

s54816 in Ассемблер
А я вот опять влезу и напомню, что можно тупо макросами код программы клеить.
источник

A

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

s

s54816 in Ассемблер
Вот этого тоже не понял. Ифы должны работать так-то. Если там от дефайнов макросы зависят, то надо оба ифа делать матчами, это как раз и есть оптимальный путь.
источник

d

disba1ancer in Ассемблер
С чего бы это в 60? У тебя имена у секций какие?
источник

C

Cofeefee in Ассемблер
section '.text' code readable executable
источник

C

Cofeefee in Ассемблер
во всех инклюдах
источник

d

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