Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

Общедоступные паременные   Найти похожие ветки 

 
DelphiLexx   (2004-09-22 18:02) [0]

С++ позволяет создвать переменные в общедоступном блоке памяти:

#pragma data_seg("Shared")
HHOOK g_hhook = NULL;
#pragma data_seg()
#pragma comment(linker, "/Section:Shared,rws")

Вопрос: Как сделать аналогичное на Delphi, без использования
CreateFileMapping.


 
Суслик ©   (2004-09-22 18:07) [1]

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

#pragma data_seg("Shared")
HHOOK g_hhook = NULL;
#pragma data_seg()
#pragma comment(linker, "/Section:Shared,rws")


я не владею. Поэтому объясни, как это работает.


 
Lin7   (2004-09-22 18:13) [2]

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


 
DelphiLexx   (2004-09-22 18:19) [3]

Этот код позволяет делать следующее:
  Он говорит компилятору, что нужно создать exe-файл в котором есть блок Shared и переменные (g_hhook) этого блока должны стать общедоступными т.е. если есть два и более разных процессов, то изменение переменной g_hhook станет видным другому процессу.
Пример:

    ---------------------------
     АДРЕСНОЕ ПРОСТРАНСТВО
     ПРОЦЕССА1

     ///////////////
     ДАННЫЕ ПРОЦЕССА1
     //////////////

     ///////////////
     КОД ПРОЦЕССА1:
      ...
       g_hook:=6;
      ...
    //////////////
    ---------------------------

    ---------------------------
     АДРЕСНОЕ ПРОСТРАНСТВО
     ПРОЦЕССА2

     ///////////////
     ДАННЫЕ ПРОЦЕССА2
     //////////////

     ///////////////
     КОД ПРОЦЕССА2:
      ...
       Здесь g_hhook может быть
       равен т.е. g_hook=6;
      ...
    //////////////
    ---------------------------


 
jack128 ©   (2004-09-22 18:21) [4]

DelphiLexx   (22.09.04 18:19) [3]
э-э-э..А как это согласуется с идеей отдельного ВАП для каждого процесса в виндах??


 
Defunct ©   (2004-09-22 18:24) [5]

jack128 ©   (22.09.04 18:21) [4]
ВАП обеих процессов пересекаются в какой-то Shared области


 
Суслик ©   (2004-09-22 18:25) [6]


>  [3] DelphiLexx   (22.09.04 18:19)

Если я конечно не совсем слабак, то вроде в дельфи такого нет.


 
DelphiLexx   (2004-09-22 18:29) [7]

Обращаюсь ко всем Delphi"стам и вспомнить может как-то можно сделать подобное


 
Lin7   (2004-09-22 18:32) [8]

Уточни: зачем тебе это? Ты переводишь исходник из С++ на Delphi?


 
Defunct ©   (2004-09-22 18:33) [9]

DelphiLexx   (22.09.04 18:29) [7]

IMHO сгодится SendMessage WM_COPYDATA если общих данных не сильно много.


 
den_777   (2004-09-22 18:38) [10]

а разве
createFileMapping(dword(-1),nil,PAGE_READWRITE,0,sz,PChar(MemForAll))

memforall:string с уникальным значением известным обоим процессам.

а dword(-1) указывает на то что надо создать поименованный участок памяти, а не отобразить файл.

Разве это не тоже самое.


 
DelphiLexx   (2004-09-22 18:41) [11]

Я не считаю себя программером на С++, а код всретил в примере по внедрению dll"ок в чужое адресное пространство. Конечно эту технологию можно восстановить через CreateFileMapping, но поверьте моему опыту не всегда это сработает на 100%


 
jack128 ©   (2004-09-22 18:44) [12]

Defunct ©   (22.09.04 18:24) [5]
ВАП обеих процессов пересекаются в какой-то Shared области


Хм. Насколько я знаю только в верхней паре гигов, только Win9x и эта память только readonly (там код системных dll)

пойти Рихтра почитать, чтоли..


 
Lin7   (2004-09-22 18:47) [13]


> DelphiLexx   (22.09.04 18:41) [11]
> Я не считаю себя программером на С++, а код всретил в примере
> по внедрению dll"ок в чужое адресное пространство. Конечно
> эту технологию можно восстановить через CreateFileMapping,
> но поверьте моему опыту не всегда это сработает на 100%


Поверьте моему опыту - в правильно написанном коде это работает всегда корректно.


 
DelphiLexx   (2004-09-22 18:49) [14]

Lin 7 и все же мне необходим аналог кода на С++


 
wicked ©   (2004-09-22 18:52) [15]

такие секции в самой делфи создать нельзя, хотя можно воспользоваться посторонними средствами и поправить готовый бинарник...
но такие секции считаются дырой в безопасности:
http://weblogs.asp.net/oldnewthing/archive/2004/08/04/208003.aspx (сайт-блог одного из разработчиков виндовс)....


 
Lin7   (2004-09-22 18:56) [16]


> DelphiLexx   (22.09.04 18:49) [14]

Механизм SendMessage WM_COPYDATA работает тоже через CreateFileMapping.

В данной ситуации у тебя два пути - через WM_COPYDATA или через CreateFileMapping.

Сорри примеры писать некогда - пора с работы домой.
Goggle обычно помогает...

Удачи.


 
Суслик ©   (2004-09-22 18:59) [17]


> Goggle обычно помогает...

Еще очень хорошо помогает вот эта книга http://www.books.ru/shop/books/8283.
Она есть в сети в электронном варианте.


 
DiamondShark ©   (2004-09-22 19:41) [18]


> jack128 ©   (22.09.04 18:44) [12]
> Defunct ©   (22.09.04 18:24) [5]
> ВАП обеих процессов пересекаются в какой-то Shared области
>
> Хм. Насколько я знаю только в верхней паре гигов, только
> Win9x и эта память только readonly (там код системных dll)

Причём тут верхняя пара гигов?

Виртуальные адреса этой области могут быть любыми.
Просто они отображаются на одни и те же физические страницы.


 
jack128 ©   (2004-09-22 20:00) [19]

DiamondShark ©   (22.09.04 19:41) [18]
Виртуальные адреса этой области могут быть любыми.
Просто они отображаются на одни и те же физические страницы.


А!!  Я подумал, что виртуальные адреса тоже совпадают.. Тогда понятно..


 
Lin7   (2004-09-23 10:17) [20]


> Суслик ©   (22.09.04 18:59) [17]

Была здесь
http://alexsoft.home.nov.ru/download/prog/
только мне кажется, что DelphiLexx и так свой кусочек
> #pragma data_seg("Shared")
> HHOOK g_hhook = NULL;
> #pragma data_seg()
> #pragma comment(linker, "/Section:Shared,rws")

оттуда взял...



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

Форум: "Основная";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.034 c
14-1095763884
Rule
2004-09-21 14:51
2004.10.10
Вот это рынок труда в Москве.


4-1094391990
Command
2004-09-05 17:46
2004.10.10
Стиль XP


14-1095785261
Ломброзо
2004-09-21 20:47
2004.10.10
Вакансия


9-1083337186
OSokin
2004-04-30 18:59
2004.10.10
Цветные линии


8-1089292943
ser_ega
2004-07-08 17:22
2004.10.10
Image





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский