Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2012, 13:59   #1
idShura
 
Регистрация: 11.06.2012
Сообщений: 6
По умолчанию

Пишу в masm под windows.

Как передать параметры в процедуру через общую область памяти?

Нашел пример программы которая может читать из памяти, но она не работает и я в ней вообще ничего не понимаю. Может кто нибудь помочь?
Код:
.386    
.model flat, stdcall
option casemap:none

;----------------------------------------------------------------------------------
;Подключаем необходимые библиотеки
include C:/masm32/include/windows.inc   ; infinite, invoke, и т.д.
include C:/masm32/include/kernel32.inc  ; SetConsoleTitle, Sleep, ExitProcess
include C:/masm32/include/msvcrt.inc    ; crt_printf\crt_scanf
 
includelib C:/masm32/lib/kernel32.lib   ; SetConsoleTitle, Sleep, ExitProcess
includelib C:/masm32/lib/msvcrt.lib     ; crt_printf\crt_scanf
;----------------------------------------------------------------------------------

.data

.data?

assume CS:CodeSg, DS:DataSg, SS:StackSg
CodeSg segment 'CODE'

begin: 

mov AX, ds:1000h    ; извлекаем параметр по адресу ds:0000h

mov AX, 4C00h
       
CodeSg ends

DataSg segment 'DATA'
DataSg ends


StackSg segment stack 'STACK'
db 256 dup(0)
StackSg ends

end begin

Последний раз редактировалось Stilet; 26.06.2012 в 07:32.
idShura вне форума Ответить с цитированием
Старый 12.06.2012, 17:10   #2
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

это полная лажа а не прога, она ичо не делает (даже не завершается), это не мастдайка и не дося, хз где ты ее отрыл.
Цитата:
Как передать параметры в процедуру через общую область памяти
общая область памяти для проги это и есть сегмент данных (а также кода). локальная память (только для процедур) это область памяти выделенная в стеке для локальных переменных. можно эти параметры сунуть в переменную и в процедуре эти переменные прочитать, можно в регах передать параметры и в проке их использовать, а можно в стек засунуть и взять их оттуда потом. как быть - решай сам
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 18:20   #3
idShura
 
Регистрация: 11.06.2012
Сообщений: 6
По умолчанию

Цитата:
можно эти параметры сунуть в переменную и в процедуре эти переменные прочитать
т.е. запись значения в переменную это и есть запись в общую память?

А я думал что нужно значение (параметр) записать в определенную ячейку памяти
idShura вне форума Ответить с цитированием
Старый 12.06.2012, 18:24   #4
Fatal Error
Пользователь
 
Аватар для Fatal Error
 
Регистрация: 20.05.2012
Сообщений: 58
По умолчанию

Цитата:
записать в определенную ячейку памяти
правильно думал. переменная это и есть определенная ячейка памяти
Fatal Error вне форума Ответить с цитированием
Старый 12.06.2012, 18:29   #5
idShura
 
Регистрация: 11.06.2012
Сообщений: 6
По умолчанию

Fatal Error спасибо тебе огромное)) Поду дописывать контрольную)
idShura вне форума Ответить с цитированием
Старый 26.06.2012, 02:45   #6
ZahAlex
Пользователь
 
Регистрация: 08.04.2009
Сообщений: 45
По умолчанию

Создай "общую память" функцией GlobalAlloc [kernеl32 - если не забыл, это там]. Ссылку на эту область можно будет передать другой программе. В прогу не въехал толком, почему AX можно и EAX как никак flat 32bit....
После изучения ассемблера стал мозг зависать...
ZahAlex вне форума Ответить с цитированием
Старый 26.06.2012, 02:58   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ссылку на эту область можно будет передать другой программе.
кто сказал?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.06.2012, 03:14   #8
ZahAlex
Пользователь
 
Регистрация: 08.04.2009
Сообщений: 45
По умолчанию

Две программы общались таким образом, правда проблема была передать эту ссылку. В принципе и не проблема - файл, реестр. Так как вызов фунции на другой программе резервирует другую область неподалёку, а иногда и подальше.

Может в чем-то и не точен, но работало. Ради интереса в свободное время восстановлю эти две проги, просто винт сгорел месяц назад... И хотелось бы почитать ответ профессионала на мой вопрос http://programmersforum.ru/showthread.php?t=206164 ....
После изучения ассемблера стал мозг зависать...

Последний раз редактировалось ZahAlex; 26.06.2012 в 03:23.
ZahAlex вне форума Ответить с цитированием
Старый 26.06.2012, 08:32   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Ссылку на эту область можно будет передать другой программе.
Какой другой программе? речь в топике шла о передачи параметров процедуре. Т.е. в сегменте данных определяются переменные, из которых процедура будет вытаскивать значение параметров и перед вызовом процедуры эти переменные инициализируются. И всё.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 26.06.2012, 17:31   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Две программы общались таким образом, правда проблема была передать эту ссылку. В принципе и не проблема - файл, реестр. Так как вызов фунции на другой программе резервирует другую область неподалёку, а иногда и подальше.
начиная с Win32, каждое приложение имеет свое адресное пространство, GlobalAlloc не выходит за его рамки(если вы конечно не через ReadProcessMemory читаете).
тем более сами сказали файл/реестр, а не ваша область памяти..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать параметры в SWFUpload Marsik PHP 1 31.07.2010 13:38
Как передать в поток параметры? И как из потока параметры достать? Anekdot Общие вопросы Delphi 2 19.02.2010 22:40
Как передать параметры функции в ДЛЛ????? Zerone Общие вопросы Delphi 3 01.06.2009 09:27
Как передать упавление на процедуру? Волк Общие вопросы Delphi 7 05.02.2009 19:26
Как програмно передать параметры на сервер Sniper Работа с сетью в Delphi 2 11.09.2007 10:05