Структура программы (.text, .data)
От: Larsito  
Дата: 07.09.05 13:11
Оценка:
1.При создании программы на ассемблере возможно указать ситуацию, когда после загрузки программы данные находятся по старшим адресам.
dec byte ptr [ebp+K32_Limit]
WeGotK32:
xchg eax,esi
ret

K32_Limit dw limit
Естественно, секция открыта для чтения/записи. Никаких особых уловок не применяются.

В с++ такая ситуация не проходит.
Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.
2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.

Возможно есть директивы прагмы для компилятора VC 6 ???
Re: Структура программы (.text, .data)
От: vnp  
Дата: 07.09.05 17:40
Оценка:
Здравствуйте, Larsito, Вы писали:

L>1.При создании программы на ассемблере возможно указать ситуацию, когда после загрузки программы данные находятся по старшим адресам.

L> dec byte ptr [ebp+K32_Limit]
L>WeGotK32:
L> xchg eax,esi
L> ret

L> K32_Limit dw limit

L>Естественно, секция открыта для чтения/записи. Никаких особых уловок не применяются.

L>В с++ такая ситуация не проходит.

L>Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.
L>2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.

L>Возможно есть директивы прагмы для компилятора VC 6 ???


Взаимное расположение имен в исходном коде не имеет никакого значения. Компилятор не присваивает окончательных адресов. Размещение секций -- дело линкера. Не знаю, как это сделать в VC; для gcc (точнее, ld), нужно передать линкеру опции -Ttext text_address -Tdata data_address и т.д.
Re: Структура программы (.text, .data)
От: gear nuke  
Дата: 07.09.05 23:14
Оценка:
Здравствуйте, Larsito, Вы писали:

L>1.При создании программы на ассемблере возможно указать ситуацию, когда после загрузки программы данные находятся по старшим адресам.


L>
L>       dec     byte ptr [ebp+K32_Limit]
L>WeGotK32:
L>        xchg    eax,esi
L>        ret

L> K32_Limit      dw      limit

L>Естественно, секция открыта для чтения/записи. Никаких особых уловок не применяются.

Если речь идёт о masm, то только если это явно указать линекру.

L>В с++ такая ситуация не проходит.

L>Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.
L>2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.

Не имеет значение положение, главное — атрибуты секций.

L>Возможно есть директивы прагмы для компилятора VC 6 ???


#pragma comment(linker, "/section:.text,RWE")
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re[2]: Структура программы (.text, .data)
От: Larsito  
Дата: 07.09.05 23:47
Оценка:
Здравствуйте, gear nuke, Вы писали:

GN>Здравствуйте, Larsito, Вы писали:


L>>1.При создании программы на ассемблере возможно указать ситуацию, когда после загрузки программы данные находятся по старшим адресам.


L>>
L>>       dec     byte ptr [ebp+K32_Limit]
L>>WeGotK32:
L>>        xchg    eax,esi
L>>        ret

L>> K32_Limit      dw      limit

L>>Естественно, секция открыта для чтения/записи. Никаких особых уловок не применяются.

GN>Если речь идёт о masm, то только если это явно указать линекру.


L>>В с++ такая ситуация не проходит.

L>>Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.
L>>2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.

GN>Не имеет значение положение, главное — атрибуты секций.


L>>Возможно есть директивы прагмы для компилятора VC 6 ???


GN>
GN>#pragma comment(linker, "/section:.text,RWE")
GN>



Программа на асме стандартная, секция данных пустая с объявлением лишь одного байта (db ?). Все остальные данные в кодовой секции
Re[3]: Структура программы (.text, .data)
От: gear nuke  
Дата: 08.09.05 00:42
Оценка:
Здравствуйте, Larsito, Вы писали:

L>>>1.При создании программы на ассемблере возможно указать ситуацию, когда после загрузки программы данные находятся по старшим адресам.

L>>>
L>>>       dec     byte ptr [ebp+K32_Limit]
L>>>WeGotK32:
L>>>        xchg    eax,esi
L>>>        ret

L>>> K32_Limit      dw      limit

L>>>Естественно, секция открыта для чтения/записи. Никаких особых уловок не применяются.

L>>>2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.


L>Программа на асме стандартная, секция данных пустая с объявлением лишь одного байта (db ?). Все остальные данные в кодовой секции


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

L>>>В с++ такая ситуация не проходит.

L>>>Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.

Если имеется ввиду такое:
foo--;
short K32_Limit;
то ничего поделать нельзя, нужно объявлять перменные до использования. При компиляции секция данных будет всё равно после секции кода располагаться, т.е. при загрузке exe адреса у данных будут больше, чем у кода.

Вообще, сущаствующие компиляторы С не очень подходят для написания кода активно использующего delta-смещения .
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Re: Структура программы (.text, .data)
От: Time Россия  
Дата: 12.09.05 10:42
Оценка:
Здравствуйте, Larsito, Вы писали:


попробуйте поискать в MSDN по #pragma
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Структура программы (.text, .data)
От: Dmitry Kotlyarov Россия  
Дата: 12.09.05 11:27
Оценка:
Здравствуйте, Larsito, Вы писали:

L>...


L>В с++ такая ситуация не проходит.

L>Код, обращающийся к переменной, объявленной ниже себя, выдает ошибку.

Пример?


L>2. При просмотре в отладчике памяти, выделенной для программы, у ассемлерной данные находятся ниже кода (простите за простоту). У сишной — в начале.


Важно, в какой секции находятся данные и какие флаги для этой секции установлены.


L>Возможно есть директивы прагмы для компилятора VC 6 ???


Возможно, но сначала надо понять, что нужно сделать... Вопрос задан расплывчато...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.