Автор | Сообщение |
|
| |
Пост N: 680
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 29.06.09 00:08. Заголовок: [GMaker] Работа с адресами.
В общем интересует возможность передачи переменных из одного приложения к другому. Посредством чтения адресов. Или может есть что попроще?
|
|
|
Ответов - 13
[только новые]
|
|
|
| |
Пост N: 2380
Зарегистрирован: 23.06.06
|
|
Отправлено: 29.06.09 09:52. Заголовок: с какими такими адре..
с какими такими адресами?
|
|
|
|
| |
Пост N: 744
Зарегистрирован: 13.02.07
Откуда: Южная Африка, Глушь лесная
|
|
Отправлено: 29.06.09 14:15. Заголовок: хмм, а просто писать..
хмм, а просто писать переменную в ини фаил? а потом чтобы вторая прога ее читала
|
|
|
|
| |
Пост N: 683
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 29.06.09 14:27. Заголовок: Ban Forever пишет: ..
Ban Forever пишет: цитата: | с какими такими адресами? |
| Адресами в памяти. sanchez пишет: цитата: | а просто писать переменную в ини фаил? |
| Как вариант плох..но вариант.. Еще как вариант через функции мультиплэера но тоже бред. Нужно через адреса. либо дллка может быть какая нибудь существует.
|
|
|
|
| New Art Games дизайнер, сценарист
|
Пост N: 2340
Зарегистрирован: 19.09.05
Откуда: Россия
Награды:
|
|
Отправлено: 29.06.09 15:21. Заголовок: zuko пишет: Адресам..
zuko пишет: оп чтото ты загнул =) может скажу глупость, но походу винда разделяет области памяти прог, и туда моно ток специально влезть, по крайней мере гамак, мне кажется ,туда не влезет хотя могу и ошибаться)
|
|
|
|
| |
Пост N: 684
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 29.06.09 15:35. Заголовок: Некоторые приложения..
Некоторые приложения могут изменять память других процессов артмания например. Вот таким образом зная адрес можно его прочесть, и использовать. Я думаю возможно все, в том числе и в ГМ. Если ты Женя не знаешь то блин думаю врятли дадут ответ здесь=) ладно будим дальше гуглить. ............... вот тут на паскале код... цитата: | var h2 : thandle; j: integer; i:cardinal; buf : Byte; hw: THandle; pidw,pid:Cardinal; str:string; adr:cardinal; begin hw:= FindWindow(nil,'Безымянный -Блокнот'); pidw:= GetWindowThreadProcessId(hw,PID); h2 := OpenProcess (PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, PID); if h2 = 0 then exit; ReadProcessMemory(h2,pointer($100000),@adr,4,i); for j:=0 to 255 do begin ReadProcessMemory(h2,ptr(adr+j),@buf,1,i); case buf of 32..126,192..255:str:=str+chr(buf); end; end; showmessage(str); CloseHandle(h2); |
| В дллку бы это сунуть=) ну и сделать это все как надо, по образцу. Чтобы дллка возвращала значение в гамак. Флу ты можешь??
|
|
|
|
| New Art Games дизайнер, сценарист
|
Пост N: 2341
Зарегистрирован: 19.09.05
Откуда: Россия
Награды:
|
|
Отправлено: 29.06.09 17:15. Заголовок: zuko пишет: Некотор..
zuko пишет: цитата: | Некоторые приложения могут изменять память других процессов артмания например. |
| Ev-genius пишет: цитата: | туда моно ток специально влезть |
| угумс, я об этом и говорил, мне кажется гм всёже не сможет влезть в память стандартными средствами, разве что вот и писать дллку. ещё антивирусы отлавливают врезку) кстати такие функции типа ReadProcessMemory походу тоже юзаются с подключением чегото нестандартного но что если попробовать запусть просто программу с параметрами? параметры в прогу обычно пишутся через тире (-) наверное многие кто играл в контру халфу знают что иногда если нужна консолька а её нет, то запускаем програаму с параметром -console что если и тебе запускать программу с параметрами? кстати гамак на сколько я знаю может запускать проги с аргументами, вроде те аргументы о которых я говорил попробуй поискать инфу по функции execute_program(prog,arg,wait) Выполнять программу prog с аргументами arg. wait - указывает ожидания перед завершением. вдруг оно? хотя это непойдёт, если менять переменные нужно будет несколько раз в процессе работы самого приложения
|
|
|
|
| |
Пост N: 2383
Зарегистрирован: 23.06.06
|
|
Отправлено: 29.06.09 17:42. Заголовок: ой блин ну ладно, по..
ой блин ну ладно, поскольку никто не ориентируется в вопросе, небольшой ликбез: программы внутри ОС оперируют адресацией по смещению, т.е. у программы есть только относительный адрес тех или иных данных, реальный адрес подсовывает ОС. есть некоторые программы(ну, всем известна Artmoney, я надеюсь), которые "влезают" в чужое адресное пространство. Хорошая ОС это пресекает(ну или антивирус, если ОС не такая хорошая). В любом случае, использовать подобный метод - это неправильно и неоптимально. В конечном итоге, никто не будет гарантировать его работу. Для обмена информацией между двумя и более приложениями давно уже изобретено немало механизмов синхронизации. Тот же файл - почему бы и нет? Но файл - это медленно и плохо для диска. БД, кеш - это всё используется в веб-программировании, на клиентской стороне не так актуально. В клиентском программировании лучше всего использовать сокеты. Тип данных определяете сами. Это может быть XML, Json или что-нить подобное, а может быть и нечто совсем иное, это уже ваше личное дело, как эту информацию собирать и как потом разбирать.
|
|
|
|
| |
Пост N: 745
Зарегистрирован: 13.02.07
Откуда: Южная Африка, Глушь лесная
|
|
Отправлено: 29.06.09 18:24. Заголовок: я конечно хз, но как..
я конечно хз, но как ты будешь определять адрес, даже в том же арт мани адрес изменяется, один раз один адрес, а если перезапустить то другой адрес, поэтому на гамаке лучше сильно не извращаться и сделать все в файлах зы. а что ты хочешь этим сделать, если не секрет?
|
|
|
|
| |
Пост N: 685
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 29.06.09 20:03. Заголовок: Ev-genius пишет: ещ..
Ev-genius пишет: цитата: | ещё антивирусы отлавливают врезку) |
| Да это не волнует.. надо- отключим.. Ev-genius пишет: цитата: | менять переменные нужно будет несколько раз в процессе работы самого приложения |
| Именно. Ban Forever Сокеты. Хм, я почемуто думал что это не вариант. Ну во первых функции подключения, отправка получение пакетов итд. Про вариант с адресами читал на одном форуме, там люди писали сервер на ВоВ. Люди не тупые. Так вот, Там был Реалмсервер.exe и Ворлдсервер.exe и эти 2 приложения между собой обменивались посредством чтения адресов. Люди активно использывали артманию для получения оных. Мне тоже стал интересен данный способ передачи переменных. Ну и плюсы-минусы как следует рассмотреть. sanchez пишет: цитата: | даже в том же арт мани адрес изменяется |
|
Не всегда.. И не во всех приложениях. sanchez пишет: цитата: | на гамаке лучше сильно не извращаться |
| Что поделать, извращенец я =), и заметь еще не самый искустный=) sanchez пишет: цитата: | а что ты хочешь этим сделать, если не секрет? |
| Мини аналог - Реалмсервер.exe, Ворлдсервер.exe. Подключение к реалмсерверу, передача плэера в ворлдсервер.
|
|
|
|
| |
Пост N: 2385
Зарегистрирован: 23.06.06
|
|
Отправлено: 30.06.09 01:23. Заголовок: zuko пишет: Сокеты...
zuko пишет: цитата: | Сокеты. Хм, я почемуто думал что это не вариант. Ну во первых функции подключения, отправка получение пакетов итд. |
| весь цивилизованный мир так делает собственно, оно для этого и предназначено zuko пишет: цитата: | Про вариант с адресами читал на одном форуме, там люди писали сервер на ВоВ. Люди не тупые. Так вот, Там был Реалмсервер.exe и Ворлдсервер.exe и эти 2 приложения между собой обменивались посредством чтения адресов. |
| вот это им вообще зачем, интересно? для увеличения производительности? не, чего греха таить, я тоже раньше думал, что так было бы прикольно. Вообще, было бы классно иметь общее глобальное пространство имён... но есть одно НО: синхронизация.
|
|
|
|
| |
Пост N: 687
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 30.06.09 02:49. Заголовок: Ban Forever пишет: ..
Ban Forever пишет: цитата: | для увеличения производительности? |
| Вот вот. и мне интересно, сильно это на производительность влияет. Бан а ты так делал? Ну, пробывал данный способ? Ban Forever пишет: цитата: | было бы классно иметь общее глобальное пространство имён... |
| ну тогда бы возникла проблема с другими приложениями, хотя, мож быть я не так думаю=) Ban Forever пишет: цитата: | но есть одно НО: синхронизация. |
| Немного непонятна конечно данная теория
|
|
|
|
|
| |
Пост N: 2387
Зарегистрирован: 23.06.06
|
|
Отправлено: 30.06.09 08:26. Заголовок: zuko пишет: Бан а т..
zuko пишет: цитата: | Бан а ты так делал? Ну, пробывал данный способ? |
| какой именно? адресовать чужое пространство? не, я, конечно, извращенец, но не до такой степени, чтобы страдать подобной хренью. Тем более, что реально использовать это потом нельзя будет по-нормальному. zuko пишет: цитата: | Вот вот. и мне интересно, сильно это на производительность влияет. |
| ну, влияет, естественно, хотя, наверное, не сильно. Потери на обмене данными между локальными процессами не такие и большие, чтобы на них экономить, а вот какие будут потери производительности, когда надо будет эту "адресную модель" дебажить и встраивать защиту от ошибок - я даже представить боюсь. Достаточно машине на мгновение уйти в своп и начнётся полная анархия. zuko пишет: цитата: | Немного непонятна конечно данная теория |
| тут всё просто. Допустим, есть два приложения: (1) и (2). Они должны обмениваться какими-то данными. По-нормальному, в самом общем виде, это выглядит так: приложение (1) открывает сокет и слушает его. Приложение (2) в какой-то момент посылает данные на этот заранее обговоренный сокет. Приложение (1) принимает данные и отсылает (2) свой ответ. Это в самом общем виде. И это лишь один из вариантов. сть ещё вариант обмена инфой через "трубы" (pipes), в общем-то примерно то же самое, только приложения обязательно должны быть локальны(сокеты - это сетевой интерфейс, поэтому такую модель можно разнести на разные машины, в программировании разницы не будет фактически никакой) и приложения должны быть изначально "связаны", например, одно приложение должно запускать другое. В такой модели с адресами, даже если предположить, что нет никаких проблем с самой адресацией(мы точно знаем, по какому адреу нужная информация), то в любом случае есть проблема с синхронизацией. Допустим, приложению (1) надо передать данные приложению (2). Как это сделать? "Вторгнуться" в адресное пространство (1) и записать новые значения переменных? А (1) в это время с этими переменными работает. И скорее всего где-нибудь просто выдаст что-нибудь типа "ошибка деления на 0". Как вариант. Или перезапишет что-нибудь из этих переменых своим новым значением(переменная была в работе, получено новое значение, следующее действие - записать его). А когда у тебя современный процессор. у которого далеко не одно ядро, всё становится ещё сложнее.
|
|
|
|
| |
Пост N: 690
Зарегистрирован: 26.06.07
Откуда: Россия, Владивосток
Награды:
|
|
Отправлено: 30.06.09 14:48. Заголовок: Ладно бан спасибо уб..
Ладно бан спасибо убедил. Впредь будем умнее. Тему можно закрывать.
|
|
|
|