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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.022 c
4-1094060806
Belaev Andrey
2004-09-01 21:46
2004.10.10
Запрет на удаление процесса по средвам ACL


4-1093831190
Registr
2004-08-30 05:59
2004.10.10
Получение каталога Windows в NT


4-1094721402
_aLF
2004-09-09 13:16
2004.10.10
Drag n Drop


6-1091083739
MakNik
2004-07-29 10:48
2004.10.10
Workstation ID


1-1096357832
PEAKTOP
2004-09-28 11:50
2004.10.10
Application.Title в консольном приложении