У меня имеется скелет программы для masm32: .386 .MODEL Flat, STDCALL .DATA <инициализируемые данные> ...... .DATA? <не инициализируемые данные> .CODE <метка> <код> ...... end <метка> Какие мне необходимо вставить директивы и где, чтобы секции .DATA и .DATA? распологались в сегменте ds(и если это возможно с определенного адреса - xxxxxxxx),а секция .CODE располагалась в сегменте сs(и если это возможно с определенного адреса - yyyyyyyy)
В 32-бит коде при flat-модели памяти понятие сегментов чисто условное и не имеет никакого отношения к размещению секций данных и кода в памяти. Базовые адреса сегментов DS,ES,SS,CS одинаковы и равны 0, а вот секции размещаются в памяти в соответствии с требованиями PE-формата для EXE-файлов, поэтому по произвольному (от балды) адресу xxxxxxxx их разместить в принципе нельзя. Как разместить секции решает компилятор\линковщик и повлять на адреса секций можно только изменением их размера и выравнивания. Ну а во время выполнения программы данные ес-но по умолчанию будут адресоваться через ds, код через cs, стэк через ss - это все "само-собой" подразумевается и никаких директив не требуется
Хорошо, я сформулирую вопрос по другому. Я продисасемблировал код программы с помощью IDA. В заголовке кода прописанно следующее: _text segment para public 'CODE' use32 assume cs:_text ;org 1401000h assume es:nothing, ss:nothing, ds:_data, fs:nothing, Дальше следуют два блока данных: один после метки _text , второй после _data Как выяснилось text-это код нашей программы, а data-это ее данные. Впринципе если данную информацию не писать в заголовке программы masm32 проблем не возникает, но заморочка в том, что в программе есть переход на конкретный адрес в разделе _data в котором находится адрес вызываемой процедуры. После трансляции masmом в коде вообще отсутствует секция _data, а ссылка указывает на несуществующйй адрес. Может вы просто подскажите, как написать то же самое для masm32(_text это будет .CODE, а _data будет .DATA) _text segment para public 'CODE' use32 assume cs:_text ;org 1401000h assume es:nothing, ss:nothing, ds:_data, fs:nothing, За ранее благодарен.
Прошу прощения за неточность, после трансляции masmom секция _data присутствует, но все же проблема остается. Суть написана выше.
Кажется я сам во всем разобрался. Просто там, где был вписан адрес с вызываемой процедурой, я поменял на реальный адрес и все заработало. Спасибо за участие.