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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2010, 20:22   #11
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

По стандарту sdtcall все параметры передаются в стеке, т.е. будет не
Цитата:
mov регистр?, DCs // HDC
mov регистр?, dispX // Integer
mov регистр?, dispY // Integer
mov регистр?, W // Integer
mov регистр?, H // Integer
mov регистр?, Buf.Canvas.Handle // HDC
mov регистр?, XSrc // Integer
mov регистр?, YSrc // Integer
mov регистр?, Rop // Cardinal (SRCCOPY = $00CC0020 {dest = source})
Цитата:
push Rop // Cardinal (SRCCOPY = $00CC0020 {dest = source})
push YSrc // Integer
push XSrc // Integer
push Buf.Canvas.Handle // HDC
push H // Integer
push W // Integer
push dispY // Integer
push dispX // Integer
push DCs // HDC
И соответственно аддреса вроде [ebp+28h] это обращение этим параметрам.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 11.07.2010, 20:25   #12
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Вот это, очевидно, вы сами дописали.
Цитата:
mov регистр?, DCs // HDC
mov регистр?, dispX // Integer
mov регистр?, dispY // Integer
mov регистр?, W // Integer
mov регистр?, H // Integer
mov регистр?, Buf.Canvas.Handle // HD
Параметры передаются в функцию ч.з. стек. Там же в стеке находятся локальные переменные.
Обращение к данным в стеке внутри функции, вот оно:

Цитата:
push [ebp+20h]
push [ebp+1Ch]
push [ebp+18h]
push [ebp+14h]
push [ebp+10h]
mov ebx,[ebp+08h]
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.07.2010, 20:31   #13
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Уже что-то, спасибо! ...только я не шпарю в адресах типа [ebp+28h], ...как это относится к параметрам не догоняю. Я совсем зеленый в ассемблере, ...что логически может быть понятно, то понимаю.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 11.07.2010, 20:35   #14
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

В самом начале процедуры в ebp копируется указатель стека.
Цитата:
push ebp
mov ebp,esp
В стеке же записаны аддрес возврата и параметры.
Тут проще показать на какой-нибудь картинке, как это выглядет, но что-то не попадается на глаза ни одна... Вот, вроде тут и тут есть что-то.
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 11.07.2010 в 20:42.
Goodwin98 вне форума Ответить с цитированием
Старый 11.07.2010, 20:45   #15
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Я вот такой примерчик сделал:

Код:
func1	proc     _A1:DWORD, _A2:DWORD, _A3:DWORD
	mov	eax, [_A1]
	mov	ebx, [_A2]
	mov	ecx, [_A3]
	ret
func1	endp
Соответственно dump

Цитата:
fn_0040106D:
push ebp
mov ebp,esp
mov eax,[ebp+8] ; - это mov eax, [_A1]
mov ebx,[ebp+0Ch]; - это mov ebx, [_A2]
mov ecx,[ebp+10h]
leave
ret 0Ch
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.07.2010, 20:46   #16
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Т.е. есть адреса:

Код:
[ebp+08h]
[ebp+28h]
[ebp+24h]
[ebp+20h]
[ebp+1Ch]
[ebp+18h]
[ebp+14h]
[ebp+10h]
[ebp+0Ch]
...и в место них я должен буду вписать правильно переменные, да? ...спасибо за статейку, попробую разобраться.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 11.07.2010, 21:16   #17
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Ну да. Вот это, например:

Код:
push	esi
push	FFFFFFFFh
push	[ebp+28h]
push	[ebp+24h]
push	[ebp+20h]
push	[ebp+1Ch]
push	[ebp+18h]
push	[ebp+14h]
push	[ebp+10h]
push	[ebp+0Ch]
push	ebx
call	SUB_L77B76B34
можно записать как
SUB_L77B76B34 (ebx, dispX,dispY,W,H,Buf.Canvas.Handle,0 ,0,Rop, ffffffffh, esi);
Эта запись условная. Т.к. Call скорее всего выполняется на адрес, где расположен jmp на адрес функции (если функция импортируемая).
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.07.2010, 21:18   #18
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Проверьте пожалуйста, я не ошибся?

Код:
[ebp+28h] 28h = 2*16^1 + 8*16	= 32+8	= 40	Rop	// Cardinal (SRCCOPY = $00CC0020 {dest = source})
[ebp+24h] 24h = 2*16^1 + 4*16	= 32+4	= 36	YSrc	// Integer
[ebp+20h] 20h = 2*16^1 + 0*16	= 32+0	= 32	XSrc	// Integer
[ebp+1Ch] 1Ch = 1*16^1 + 12*16	= 16+12	= 28	Buf.Canvas.Handle // HDC
[ebp+18h] 18h = 1*16^1 + 8*16	= 16+8	= 24	H	// Integer
[ebp+14h] 14h = 1*16^1 + 4*16	= 16+4	= 20	W	// Integer
[ebp+10h] 10h = 1*16^1 + 0*16	= 16+0	= 16	dispY	// Integer
[ebp+0Ch] 0Ch = 0*16^1 + 12*16	= 0+12	= 12	dispX	// Integer
[ebp+08h] 08h = 0*16^1 + 8*16	= 0+8	= 8	DCs	// HDC
Значит процедурка начинается с проверки флага:

Код:
  mov	eax,[ebp+28h]
  mov	ecx,eax
  shl	ecx,02h
  xor	ecx,eax
  test	ecx,00CC0000h
  jz 	L77B813AB
Значение SRCCOPY = $00CC0020 это как понять?

Код:
  test	ecx,00CC0000h
...сравнивает что-то, а jz отправляет в L77B813AB если результат равен 0?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Stilet; 12.07.2010 в 16:19.
Beermonza вне форума Ответить с цитированием
Старый 11.07.2010, 21:26   #19
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Ну у меня по-крайней мере также получилось.

offtop:
из-за вашей темы теперь захотелось свои все функции на mmx переделать
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.07.2010, 21:35   #20
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Ulex Посмотреть сообщение
Ну у меня по-крайней мере также получилось.

offtop:
из-за вашей темы теперь захотелось свои все функции на mmx переделать
Ато ...мне покоя не дает единственная тормозная BitBlt, а так все летает.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Windows I/o без Kernel32.dll и Advapi32.dll coinkrsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.06.2010 08:52
ошибка программы internal error in user32.dll??? grammaton Помощь студентам 3 23.01.2010 10:07
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36
Война Авиры и User32.dll Google[Bot] Безопасность, Шифрование 2 13.01.2009 18:40
Пытаюсь создать Dll для своей проги Parcenson Общие вопросы Delphi 6 30.09.2008 20:36