Вопрос № 55196: Доброго времени суток уважаемые эксперты-ассемблерщики.
Как сделать резидент в вин32, что бы например на нажатие клавиши выскакивал диалог, мол вы нажали такой-то кей.
Проблема в том как оставить процедуру резидентной в памяти в вин32.
Мо...Вопрос № 55197: Доброго времени суток уважаемые эксперты-ассемблерщики.
Как нарисовать линию(к примеру), я знаю что надо использовать функцию LineTo, там перемещать указатель и всё такое. Там надо чё-то выделять, удалять какие то объекты, с параметрами непонятны...Вопрос № 55206: Добрый вечер Господа ЭКСПЕРТЫ!!!
Вы так и не ответили на мой вопрос!
Повторяю:
1. Имею ли Я право читая Ваши рассылки, давать ответ, на тот вопрос, которые задают граждане, если я уверен, что отвечу на 5+++
2. О себе:
- Ассемблер ...Вопрос № 55234: Здравствуйте уважаемые эксперты. Помогите пожалуйста решить проблему с MASM32.
При компиляции программы выдаёт сообщение вида:CVTRES : fatal error CVT1101: cannot open rsrc.res for reading
Что бы это означало.Установил вроде корректно,да и ус...Вопрос № 55276: Уважаемые эксперты, подскажите пожалуйста как поместить в регистр число, расположенное в памяти по адресу, находящемуся в другом регистре....Вопрос № 55311: Добрый день уважаемые эксперты!Хочу задать Вам следующ вопрос:
Это рабочая прога
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
В отлад...Вопрос № 55314: Здравствуйте Олег Владимирович ! Спрошу у вас, потому что вы мне все время отвечаете понятным языком. Подскажите как написать программу которая выводит на экран сумму двух чисел, которые вводит пользователь....
Вопрос № 55.196
Доброго времени суток уважаемые эксперты-ассемблерщики.
Как сделать резидент в вин32, что бы например на нажатие клавиши выскакивал диалог, мол вы нажали такой-то кей.
Проблема в том как оставить процедуру резидентной в памяти в вин32.
Может кто знает, скажите.
Спасибо.
Отправлен: 12.09.2006, 19:55
Вопрос задал: ENS (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, ENS!
Для этого нужно перехватить клавиатурное прерывание через ловушки (Hooks).
Для этого пишем небольшую DLL, в неё помещаем функцию и устанавливаем обработчик на неё вот так:
;берём адрес подпрограммы KeyboardProc в этой DLL
Call GetProcAddress, esi, ofs szLLKeyboardHookProc
or eax, eax
jz @@Error
Удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская, 66 WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 12.09.2006, 20:32
Вопрос № 55.197
Доброго времени суток уважаемые эксперты-ассемблерщики.
Как нарисовать линию(к примеру), я знаю что надо использовать функцию LineTo, там перемещать указатель и всё такое. Там надо чё-то выделять, удалять какие то объекты, с параметрами непонятным. Если кому не трудно напишите пример рисование линии по всей полноте.
Спасибо.
Отправлен: 12.09.2006, 19:56
Вопрос задал: ENS (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, ENS!
Вот кусочек кода:
push edi esi
mov eax, [(t inizd esi).ZoomLevel]
mov edi, eax
mov esi, eax
@e1:
Call MoveToEx, [@@hDCZoom], edi, 0, NULL
Call LineTo, [@@hDCZoom], edi, [@@y]
add edi, esi
dec ebx
jnz @@e1
pop esi edi
он рисует сетку в программе ExactMouse ( http://exactmouse.com/ )
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская, 66 WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 12.09.2006, 20:35
Вопрос № 55.206
Добрый вечер Господа ЭКСПЕРТЫ!!!
Вы так и не ответили на мой вопрос!
Повторяю:
1. Имею ли Я право читая Ваши рассылки, давать ответ, на тот вопрос, которые задают граждане, если я уверен, что отвечу на 5+++
2. О себе:
- Ассемблер изучил благодаря рассылкам Олега Калашникова
- Неплохо исследую программы, написанные на Ассемблере в отладчике, дизассемблере
- Пишу самостоятельно небольшие (пока) программы в компиляторе MASM
- В настоящее время изучаю исскуство реверсинга по новой (вышедшей недавно в издательство) книге профессора А.Панова
- Ломаю небольшие (пока) программки crackme
Отвечает: Wild_one
Здравствуйте, Луковкин Николай Иванович!
Конечно можете. Просто во время подписки на рассылку поставьте галку Эксперт и к Вам на мыло будут приходить вопросы. С увелечением количества ответов будет увеличиваться Ваш класс. Ознакомьтесь с правилами портала.
Ответ отправил: Wild_one (статус: 4-ый класс)
Ответ отправлен: 12.09.2006, 21:26 Оценка за ответ: 5 Комментарий оценки: Большое спасибо Вам за ответ!!!
Вопрос № 55.234
Здравствуйте уважаемые эксперты. Помогите пожалуйста решить проблему с MASM32.
При компиляции программы выдаёт сообщение вида:CVTRES : fatal error CVT1101: cannot open rsrc.res for reading
Что бы это означало.Установил вроде корректно,да и установка вроде простая.
Отвечает: Лысков Игорь Витальевич
Здравствуйте, Rawill khasyanow!
С установкой все в порядке :)
Указанное сообщение говорит о том, что не найден файл ресурсов
Сначала надо разобраться, ресурсы используются?
1) Если да, то в BAT-файле необходимо присутствие следующих строк:
MASM32BINRc.exe /v rsrc.rc
MASM32BINCvtres.exe /machine:ix86 rsrc.res
MASM32BINLink.exe /SUBSYSTEM:WINDOWS program.obj rsrc.obj
где rsrc.rc - скрипт ресурсов, program.obj - объектный файл Вашей прграммы
2)Если ресурсов нет, то две первые строки лишние, а в последней надо исключить rsrc.obj
Надо правильно создать BAT-файл для
--------- Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Студент)
Ответ отправлен: 13.09.2006, 10:29
Вопрос № 55.276
Уважаемые эксперты, подскажите пожалуйста как поместить в регистр число, расположенное в памяти по адресу, находящемуся в другом регистре.
Отправлен: 13.09.2006, 13:32
Вопрос задал: Веталь (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Евгений Иванов
Здравствуйте, Веталь!
Нет ничего проще.
mov eax, [edx]
удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор) Россия, Нижний Новгород Тел.: +78313145721 Организация: M2Media.ru Адрес: Нижний Новгород, ул.Малая Ямская, 66 WWW:Eugene Ivanov ICQ: 214889076 ---- Ответ отправлен: 13.09.2006, 13:48
Отвечает: n0name
Здравствуйте, Веталь!
В ecx указатель на твоё число, в eax помещается само число.
Приложение:
Ответ отправил: n0name (статус: 4-ый класс)
Ответ отправлен: 13.09.2006, 16:50
Отвечает: Олег Владимирович
Здравствуйте, Веталь.
Для этого применяется следующая запись: [регистр]. Она означает ячейку памяти, адрес которой хранится в реистре. Но будьте внимательны: не все регистры используются для адресации данных.
Допустимые регитры: BX, SI, DI (адресация в DS); BP (адресация в сегменте SS); EAX, ECX, EDX, EBX, ESI, EDI (адресация в DS); EBP, ESP (адресация в SS).
Примеры:
MOV AX,[BX] - записывает в AX слово по адресу DS:BX;
MOV word ptr CS:[BP],0 - записывает 0 в слово по адресу CS:BP
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 3-ий класс)
Ответ отправлен: 13.09.2006, 20:08 Оценка за ответ: 5
Вопрос № 55.311
Добрый день уважаемые эксперты!Хочу задать Вам следующ вопрос:
Это рабочая прога
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
В отладчике AFD после int 20h идет dec ax - для чего это,затем db 65-?
и ниже какие-то команды(вы не могли бы подробно объяснить что это за команды и для чего они нужны!!!)
Это не рабочая прога:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
Message db 'Hello, world!$'
int 21h
int 20h
CSEG ends
end Begin
Почему я не могу определьть байт в этом месте.Если ее запускать через AFD получается:
mov ah,9
mov dx,105
dec ax
db 65 и т.д. Куда делись int-ы?
Отвечает: Стас
Здравствуйте, Maksim,V,I/max!
Вот смотри что у тебя в программе идет после int 20h? - db "Hello...
Вот и в отладчике после int 20 идет код буквы "H", который равен 48h, который в свою очередь является командой "DEC AX", потом идет буковка "e" код которой 65h.
Т.е. как ты и писал в программе после int20 идет фраза "Hello, world!$", а вот после ней пойдет мусор, оставшийся после других программ.
Во втором случае, ты данные вставляешь внутрь кода программы. Процессор не знает где кончается код и начинаются данные, поэтому он начинает исполнять данные, когбуд-то это программа. Естественно получается черте что, и скорее всего вылетает ошибка.
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 13.09.2006, 19:00 Оценка за ответ: 5
Вопрос № 55.314
Здравствуйте Олег Владимирович ! Спрошу у вас, потому что вы мне все время отвечаете понятным языком. Подскажите как написать программу которая выводит на экран сумму двух чисел, которые вводит пользователь.
Отправлен: 13.09.2006, 17:37
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Олег Владимирович
Здравствуйте, Whiteman!
Сначала уточню задачу.
Способ ввода чисел и вывода результата может быть разным. Я предлагю вводить строку типа 56+156=, и заставлять программу дописывать 212, т.е. получится 56+156=212 и курсор окажется на новой строке.
Рассматриваются только натуральные числа, т.к. оперировать дробными числами удобно средствами арифметического сопроцессора, а это - отдельная огромная тема.
Собственно алгоритм программы будет ясен из комментариев. Удачи!
Приложение:
--------- Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 3-ий класс)
Ответ отправлен: 13.09.2006, 20:08 Оценка за ответ: 5