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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2010, 22:00   #21
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,432
По умолчанию

Цитата:
Значит процедурка начинается с проверки флага:

Код:

Код:
  mov	eax,[ebp+28h]
  mov	ecx,eax
  shl	ecx,02h
  xor	ecx,eax
  test	ecx,00CC0000h
  jz 	L77B813AB
Получается что при SRCCOPY он не переходит на метку L77B813AB.
Уже два раза пересчитал. У меня - не переходит.
Вообще пока не нашёл, по какому флагу он туда отправится.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 11.07.2010, 22:01   #22
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вот тут такое есть:

Код:
  push	ebx
  mov	ebx,DCs                   //[ebp+08h] = DCs: HDC
  push	esi
  xor	esi,esi
  cmp	[L77BB7064],esi
  push	edi
  mov	edi,00010000h
  jnz	L77B9668B
и по ссылке:

Код:
  L77BB7064:
  db	00h;
  db	00h;
  db	00h;
  db	00h;

  L77BB7068:
  dd	0000000Ah
  db	08h;
  db	00h;
  db	00h;
  db	00h;
  db	08h;
  db	00h;
  db	00h;
  db	00h;
  db	01h;
  db	00h;
  db	00h;
  db	00h;

  L77BB7078:
  dd	00000000h
  db	0Ah;
  db	00h;

  ...и т.д.
...не пойму, это что?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 11.07.2010 в 22:11.
Beermonza вне форума Ответить с цитированием
Старый 12.07.2010, 05:07   #23
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Какая-то глобальная переменная...Гадать о ее назначении можно много, но проще, имхо, опытным путем узнать, как они влияет.
Что-то не вижу, где находится этот код ?
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 12.07.2010 в 05:10.
Goodwin98 вне форума Ответить с цитированием
Старый 12.07.2010, 16:02   #24
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Красным выделил строчку, вместо адреса в скобках ссылка, а ниже сразу после метки L77BB7064: на которую идет ссылка [L77BB7064] идет код, что показал, ...но там подряд полно строчек и конца нет, вернее он есть, но так и идет такими записями типа db 00h; и dd 0000000Ah. Я просто не знаю, что взять. Вот если написано сразу:

Код:
L77BB7064:
dd	00000000h
...тогда вроде ясно, можно было бы сразу записать так:

Код:
cmp	[00000000h],esi
А если начинается с этого:

Код:
  L77BB7064:
  db	00h;
  db	00h;
  db	00h;
  db	00h;

  L77BB7068:
  dd	0000000Ah
  db	08h;
  db	00h;
  db	00h;
  db	00h;
  db	08h;
  db	00h;
  db	00h;
  db	00h;

  ...и т.д.
...и конца и края невидно, то я в затруднении. Может нужна первая же строчка dd после метки, даже если она ниже и под другими метками?
Или эти четыре нулевых байта:

Код:
  db	00h;
  db	00h;
  db	00h;
  db	00h;
... и есть искомое?

Ну, допустим, знаю что в скобках написать. Смущает последовательность:

Код:
  cmp	[L77BB7064],esi
  push	edi
  mov	edi,00010000h
  jnz	L77B9668B
если сравниваются два значения через cmp, то следующей строкой должен быть переход, а там помещение в стек регистра и его заполнение ...или можно считать что это аналогично этому:

Код:
  push	edi
  mov	edi,00010000h
  cmp	[L77BB7064],esi
  jnz	L77B9668B
... ???
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 12.07.2010 в 16:10.
Beermonza вне форума Ответить с цитированием
Старый 12.07.2010, 16:53   #25
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
...тогда вроде ясно, можно было бы сразу записать так:

Код:

cmp [00000000h],esi
Нет, не так.
Цитата:
cmp [L77BB7064],esi
так и остается, здесь L77BB7064 - это название метки, т.е. так же можно написать.
Цитата:
cmp [chtoto],esi
.....
chtoto dd 0
Тот факт, что в тексте есть еще метка L77BB7068, говорит лишь о том, что дизассемблер нашел где-то обращение к этой памяти и если вы сами его не увидите, значит оно вам и не нужно.

Цитата:
Ну, допустим, знаю что в скобках написать. Смущает последовательность:

Код:

cmp [L77BB7064],esi
push edi
mov edi,00010000h
jnz L77B9668B

если сравниваются два значения через cmp, то следующей строкой должен быть переход, а там помещение в стек регистра и его заполнение ...или можно считать что это аналогично этому:

Код:

push edi
mov edi,00010000h
cmp [L77BB7064],esi
jnz L77B9668B

... ???
Да это так.
PS меня не было на форуме долго... А куда делась кнопка с тегом кода
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 12.07.2010, 17:09   #26
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хм, ...тогда как можно удалить метку от сюда:

Код:
cmp [L77BB7064],esi
...??? Там такое дело, на эту метку ссылается не один десяток кодов, и все черпают с этой секции с dd и db. Если это четыре байта по 00h, то это нули все, все двойное слово, тогда без скобок:

Код:
cmp 00000000h,esi
...т.е. проверка на равенство esi такому содержимому 00000000h, ...верно?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 12.07.2010, 18:04   #27
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Т.к. не нашел в библиотеке тот код, о котором вы написали, то решил сам посмтреть как можно упростить функцию.
Вывод: скорости это добавит совсем чуть, т.к. почти все исполняется в ядре, куда доступ закрыт.
Вот самое малое, что вышло.
Цитата:
push 0 ; незнаю что это, но такие параметры передаются от gdi32.dll
push -1 ; наверно что-то зарезервированно
push SRCCOPY ; тут все так же
push 0
push 0
push [hDC2]
push [W]
push [H]
push 0
push 0
push [hDC1]
call func ; почему-то не получилось просто вставить

......
func:
mov eax, 100dh
mov EDX,7FFE0300h
call dword ptr [edx]
ret 2ch
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 12.07.2010 в 18:08.
Goodwin98 вне форума Ответить с цитированием
Старый 12.07.2010, 19:05   #28
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Хм, ...вообще, мне бы знать от контекста, или от самой формы область ее графических данных, указатель и размер, ...что-то сообразить можно будет.

push FFFFFFFFh у меня не работает, помечает как ошибку.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 12.07.2010, 19:38   #29
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
push FFFFFFFFh у меня не работает, помечает как ошибку.
Какой компилятор и как именно помечает ?
Цитата:
Хм, ...вообще, мне бы знать от контекста, или от самой формы область ее графических данных, указатель и размер, ...что-то сообразить можно будет.
Не очень понял
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 12.07.2010, 19:39   #30
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ага, вот так в Delphi работает:

Код:
  asm
    push   0
    push   -1
    push   00CC0020h	//[ebp+28h] = SRCCOPY
    push   YSrc		//[ebp+24h] = YSrc: Integer
    push   XSrc		//[ebp+20h] = XSrc: Integer
    push   BufHandle	//[ebp+1Ch] = BufHandle: HDC
    push   H		//[ebp+18h] = H: Integer
    push   W		//[ebp+14h] = W: Integer
    push   dispY	//[ebp+10h] = dispY: Integer
    push   dispX	//[ebp+0Ch] = dispX: Integer
    push   DCs		//[ebp+08h] = DCs: HDC
    call @func
  @func:
    mov   eax,0000100dh
    mov   edx,7FFE0300h
    call  [edx]
  end;
Спасибо всем за помощь!
Руководитель проекта 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