Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 549
от 18.09.2006, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 353, Экспертов: 35
В номере:Вопросов: 7, Ответов: 9


Вопрос № 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

Call SetWindowsHookEx, WH_KEYBOARD_LL, eax, esi, NULL
or eax, eax
jz @@Error
mov [edi], eax

Удачи!
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +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
Отправлен: 12.09.2006, 21:06
Вопрос задал: Луковкин Николай Иванович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Wild_one
Здравствуйте, Луковкин Николай Иванович!
Конечно можете. Просто во время подписки на рассылку поставьте галку Эксперт и к Вам на мыло будут приходить вопросы. С увелечением количества ответов будет увеличиваться Ваш класс. Ознакомьтесь с правилами портала.
Ответ отправил: Wild_one (статус: 4-ый класс)
Ответ отправлен: 12.09.2006, 21:26
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо Вам за ответ!!!


Вопрос № 55.234
Здравствуйте уважаемые эксперты. Помогите пожалуйста решить проблему с MASM32.
При компиляции программы выдаёт сообщение вида:CVTRES : fatal error CVT1101: cannot open rsrc.res for reading
Что бы это означало.Установил вроде корректно,да и установка вроде простая.
Отправлен: 13.09.2006, 01:02
Вопрос задал: Rawill khasyanow (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, 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-ы?
Отправлен: 13.09.2006, 17:26
Вопрос задал: Maksim,V,I/max (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Стас
Здравствуйте, 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное