Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Область только для чтения.   Найти похожие ветки 

 
Тимохов ©   (2004-06-29 11:36) [0]

Не совсем понимаю, куда отнести этот вопрос - ясно не в общую (т.к. наиболее важная часть вопроса относится к win), и не в потрепаться (:)).

В одной из книг (Фень Юань, Программирование графики в windows) увидел такой код:

const TCHAR szOperation[] = _T("open");

К данной строчке есть комментарий:

The two “const TCHAR” array definitions ensure that those constant strings are put into the read-only data section in the final binary code generated by the compiler and linker

Т.е. в cи есть возможность явно управлять куда помещать данные: в область кода (т.е. только read) или в область данных (т.е. r/w).

Вопросы:
1. Есть в дельфи возможность упарвлять размещением, например константной строки или дельфи автоматически распологает ее в области кода? Если второе, то я тогда понимаю, почему не работает код (ну или примерно такой - на память писано)

var
  s: string;
begin
  s := "abc";
  CharToOem(s, s);
end;


т.к. константа "abc" находится в области кода, сразу за указанными кодом.

2. Как windows определяет какая область какая? Т.е. где это задается и как это можно изучить по готовому exe. Насколько я понимаю для того, чтобы изучить exe и dll нужно использовать утилиту dumpbin? Понимаю, что вопрос (вернее ответ на него) слишком развернут. Поэтому был бы признателен, если бы мне указали, где можно про это почитать, желательно в доступной форме (рус/англ - не важно). Желательно, что-нибудь кроме Рихтера.

Заранее благодарен.

ЗЫ. Надеюсь угадал с расположением вопроса в данном форуме :)


 
Тимохов ©   (2004-06-29 12:37) [1]

Хотел бы уточнить вопрос 1 из оригинального поста.

Что определяет, что данная область памяти является областью кода, а данная областью данных. Правильно ли я понимаю, что это определяется режимами доступа к виртуальной памяти?

К тому же тот же Фень Юань сказал, что в случае такого описания строки она может быть повтороно использована разными копиями одного же приложения. Как это может быть?

ЗЫ. В общем я понимаю, что у меня есть серьезные пробелы в понимании загрузки и выполнения исполняемых модулей. Еще раз повторяю, что был бы рад отсыткой к каким-нибудь источникам.


 
Игорь Шевченко ©   (2004-06-29 13:09) [2]


> Что определяет, что данная область памяти является областью
> кода, а данная областью данных.


Флажки в секции PE-файла.


> 1. Есть в дельфи возможность упарвлять размещением, например
> константной строки или дельфи автоматически распологает
> ее в области кода? Если второе, то я тогда понимаю, почему
> не работает код (ну или примерно такой - на память писано)


Автоматически


> 2. Как windows определяет какая область какая? Т.е. где
> это задается и как это можно изучить по готовому exe.


Program Files\Borland\Delphi\Bin\TDUMP.EXE


> ЗЫ. Надеюсь угадал с расположением вопроса в данном форуме
>


С равным успехом ее можно расположить и в "Потрепаться"


 
Тимохов ©   (2004-06-29 13:10) [3]


> С равным успехом ее можно расположить и в "Потрепаться"

Игорь, вы как всегда вселяете оптимизм.


 
Anatoly Podgoretsky ©   (2004-06-29 13:15) [4]

Зависит от параметров проекта, "изменяемые" константы или нет.
И ошибка - надо PChar(S) только S должна быть записываемапя и не пустая


 
Тимохов ©   (2004-06-29 13:19) [5]


> Anatoly Podgoretsky ©   (29.06.04 13:15) [4]

да понятно, что ошибка - я без компа не могу писать корректно :)))

Я знаю, что строковые константы, типа

s := "dima";

пишутся сразу за функцией.

А что, может быть и по-другому - может строка "dima" быть расположена где-то еще?


 
Тимохов ©   (2004-06-29 13:22) [6]

Все-таки, может поможет кто-нибудь документацией отличной от Рихтера: его я потом еще раз прочту, т.к. с первого раза в области dll ничего не понял :(((

1. Рус/англ - не важно
2. online/книга - не важно


 
Тимохов ©   (2004-06-29 13:58) [7]


> Игорь Шевченко ©   (29.06.04 13:09) [2]

Правильно ли я понимаю, что:

1. по флажкам в секциях PE файла загрузчик понимает какая область соответствует кода, какая данным.
2. соответствующим образом для областей памяти виртуальной памяти проставляет флаги доступа - для чтения, для чтения/записи и т.д.

?


 
Игорь Шевченко ©   (2004-06-29 14:02) [8]


> 1. по флажкам в секциях PE файла загрузчик понимает какая
> область соответствует кода, какая данным.
> 2. соответствующим образом для областей памяти виртуальной
> памяти проставляет флаги доступа - для чтения, для чтения/записи
> и т.д.


Именно так. Для этого флажки и придуманы


 
Тимохов ©   (2004-06-29 14:06) [9]


> Игорь Шевченко ©   (29.06.04 14:02) [8]


Повторю, часть вопроса (выше была):

"Фень Юань сказал, что в случае такого описания строки она может быть повтороно использована разными копиями одного же приложения. Как это может быть?"

Я пониамаю, что в общем случае exe загружаются через механизм filemapping, т.е. не копируется в файл подкачки, а проецируются на область виртуальной памяти.

Как вы думаете ФЮ имел в виду этот механизм проецирования, когда говорил повторное использование констант?


 
Игорь Шевченко ©   (2004-06-29 14:13) [10]

Тимохов ©   (29.06.04 14:06)


>
> "Фень Юань сказал, что в случае такого описания строки она
> может быть повтороно использована разными копиями одного
> же приложения. Как это может быть?"


Фень Юань сказал абсолютно правильно. Когда загружается EXE-файл, то та его часть (те секции), которые не помечены атрибутом Writeable, отображается на адресное пространство процесса как FileMapping. Отсюда следует, что в оперативной памяти эти секции будут находиться единожды, если EXE-файл отображается по предпочтительному базовому адресу.


 
Тимохов ©   (2004-06-29 14:15) [11]

Ну тогда я спокоен: в дельфи константы и так хранятся в области кода (судя по cpu), а эта область radable. Т.е. озабачиваться этим особенно не надо.



Страницы: 1 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.04 c
3-1089721403
dem2
2004-07-13 16:23
2004.08.08
sql и dbf


1-1090585840
zorik
2004-07-23 16:30
2004.08.08
Создать форму


4-1088510108
NLO
2004-06-29 15:55
2004.08.08
Find_Window


14-1090674344
AlexG
2004-07-24 17:05
2004.08.08
Что такое ДЕЛЕГАТЫ?


1-1090933083
KIR
2004-07-27 16:58
2004.08.08
Народ, как заптхивать/доставать картинки из dll