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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2012, 15:42   #1
sauvage
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию Assembler ToAscii - ошибка

Всем привет! Пытаюсь перевести клавиатурный логгер с Delphi (там все работает) на Assembler и застрял на вызове ToAscii функции:

Код:
.data?
myKBS			db 256 dup (?)
myKeyV			db ?
myKeyS			db ?
myChar			dd ?


MyHookProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
	.IF nCode==HC_ACTION
		.IF wParam==WM_KEYUP
			invoke GetKeyboardState, ADDR myKBS
; VK_Code и Scan_Code помещаются по адресам myKeyV & myKeyS
			mov esi, lParam
			mov edi, OFFSET myKeyV
			movsb
			add esi, 3
			mov edi, OFFSET myKeyS
			movsb
; Значения myKeyV & myKeyS заносятся корректно...
; Вызов ToAscii
			push 0
			push OFFSET myChar
			push OFFSET myKBS
			push OFFSET myKeyS
			push OFFSET myKeyV
; Здесь и происходит что то непонятное: по адресу myKeyV находится
; значение 41 (=клавиша A), а в стек почему то помещается значение
; 31 (=клавиша 1), хотя нажата была "А".
			call ToAscii
		.ENDIF
	.ENDIF
	invoke CallNextHookEx, HookHandle, nCode, wParam, lParam
	ret
MyHookProc endp
Вызов обработки Хука проходит нормально, может быть проблема с вызовом / обработкой GetKeyboardState? Просьба не пинать за корявый код, в ассемблере не силен, только тренируюсь.

Заранее благодарю.

-----------------------------------------------------

Тему можно закрыть: переделал вызов процедуры с Call на Invoke, теперь все работает. Хотя если кто-то подскажет в чем была ошибка (в образовательных целях), то буду благодарен.

Последний раз редактировалось sauvage; 31.07.2012 в 16:16.
sauvage вне форума Ответить с цитированием
Старый 31.07.2012, 19:35   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
push OFFSET myKeyS
push OFFSET myKeyV
Почему offset-то? Надо сами значения.
Somebody вне форума Ответить с цитированием
Старый 31.07.2012, 22:25   #3
sauvage
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

Точно. Честно говоря даже не знаю почему я offset cюда вставил . Спасибо!
sauvage вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в программе на flat assembler Ted_45 Помощь студентам 0 26.06.2012 09:34
Ошибка при компиляции (assembler) alexeyk0 Помощь студентам 0 23.04.2012 22:38
Перевод в ToAscii stdio Общие вопросы C/C++ 0 23.03.2012 14:01
Ошибка в программе (Assembler) Modo Помощь студентам 2 23.12.2010 20:04
WH_JOURNALRECORD. Как получить VirtualCode нажатой кнопки? Или как запустить toAscii только с ScanCode? TwiX Общие вопросы Delphi 7 09.06.2010 23:31