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

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


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

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

Выпуск № 583
от 25.10.2006, 19:35

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


Вопрос № 59531: zdrastvuite,izvinite za glupyj vopros..ja xotel sprosit sto takoje v assmblere naprimer "loc_004051c4"..spasibo...
Вопрос № 59532: Есть конкретная цель: программный захват изображения экрана 16-разрядного приложения под Win32, в случае полноэкранного режима работы. Я предполагаю, при выводе используется другой участок видеопамяти, нежели чем для программ Windows,...
Вопрос № 59587: Здравствуйте ! Пытаюсь скопировать строку с адреса cs:[80h+1eh]. Но почему то все время копируется 16 символов, даже если строка длиной в 5 символов: пять символов строка, а остальное пробелы. Случаем не знаете метод, чтобы лишние пробелы не копирова...
Вопрос № 59597: Как мне запустить (откомпилировать) следующую программу: mov eax, 0b2h Прошу пошаговой инструкции. За хорошие ответы оценки гарантирую. ...

Вопрос № 59.531
zdrastvuite,izvinite za glupyj vopros..ja xotel sprosit sto takoje v assmblere naprimer "loc_004051c4"..spasibo

Приложение:

Отправлен: 19.10.2006, 21:01
Вопрос задал: Nu Ja (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Pinkbyte
Здравствуйте, Nu Ja!

loc_004051c4 - это пример некоей метки, используемой как правило в дизассемблере для упрощения понимания переходов(вместо переходов по абсолютным адресам). Кстати 004051с4 в данной метке и является тем самым абсолютным адресов, по которому есть переход из команд jmp/jcc/call
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 2-ой класс)
Ответ отправлен: 22.10.2006, 16:03
Оценка за ответ: 5

Отвечает: Луковкин Николай Иванович
Здравствуйте, Nu Ja!
Совет: Изучай исследование программы (не имеет значение на каком языке она написана) в дизассемблере IDA Pro!
Тогда ты поймешь что это за команда!
Например: В IDA Pro есть такая замечательная возможность, как переименование невнятных меток, имен функций (loc_004051C4) в более осмысленные (func_secur). Самое главное - такое изменение распространится на все участки кода, ссылающиеся на данную метку!
Если понял, изучай дизассемблер IDA Pro!

---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 3-ий класс)
Ответ отправлен: 23.10.2006, 16:55


Вопрос № 59.532
Есть конкретная цель:
программный захват изображения экрана 16-разрядного приложения
под Win32, в случае полноэкранного режима работы.
Я предполагаю, при выводе используется другой участок видеопамяти,
нежели чем для программ Windows, так как ни printscreen,
ни GetDC(0) не дают результата.

Все, что мне удалось найти, относится к описанию Windows 3.1.
В расширенном режиме Windows cохранение/восстановление содержимого экрана виртуальной машины MS-DOS выполняется модулем драйвера видеоконтроллера, выполненном в виде обычной DLL-библиотеки.
Знать бы эту DLL и ее API...

В общем-то, я даже незнаю куда дальше копать. Может, посоветуете что-нибудь?
Отправлен: 19.10.2006, 21:03
Вопрос задал: JohnP (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Pinkbyte
Здравствуйте, JohnP!

Честно говоря с этим не сталкивался, но на wasm.ru недавно тоже был вопрос по поводу работы с изображением в консоли в полноэкранном режиме. Копать надо в сторону ntvdm - виртуальной машины, ответственной за работу полноэкранного режима консольных приложений. Большего подсказать к сожалению не могу
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 2-ой класс)
Ответ отправлен: 22.10.2006, 16:05
Оценка за ответ: 3
Комментарий оценки:
Спасибо. Но мне это известно. ntvdm(NT Virtual Dos Mashine) отвечает не только за полноэкранный режим, а за полную эмуляцию работы 16-разрядных программ.


Вопрос № 59.587
Здравствуйте ! Пытаюсь скопировать строку с адреса cs:[80h+1eh]. Но почему то все время копируется 16 символов, даже если строка длиной в 5 символов: пять символов строка, а остальное пробелы. Случаем не знаете метод, чтобы лишние пробелы не копировались ?

Приложение:

Отправлен: 20.10.2006, 13:36
Вопрос задал: Whiteman (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: ADSota
Здравствуйте, Whiteman!

Конечно не знаю, какая строка содержится по этому адресу (CS:9e)...
Копирование можно останавливать при любом символе:

...
stosb
cmp al,' ';здесь идет сравнение с нужным вам символом...
jne ttttt

---------
Открыть глаза навстречу солнцу
Ответ отправил: ADSota (статус: Специалист)
Ответ отправлен: 20.10.2006, 17:25

Отвечает: Олег Владимирович
Здравствуйте, Whiteman!

А можно вопрос: зачем вы присваиваете CX?
По-моему, этим вы хотите ограничить кол-во возможных символов для чтения.
Тогда применим условный цикл:

LEA SI,CS:[9Eh] ;Установка адресов, DS и ES уже инициализированы (надеюсь)
LEA DI,"nnnn"
MOV CX,0Ch ;максимум 12 символов
1: MOVSB ;LODSB+STOSB без изменениря аккумулятора
CMP [SI],20h ;Сравниваем след. символ с пробелом
LOOPNE @1 ;Если не пробел, и CX>1, продолжаем

Удачи!
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 5-ый класс)
Ответ отправлен: 20.10.2006, 22:33
Оценка за ответ: 4
Комментарий оценки:
Да но если в имени файла содержится пробел, что тогда ?

Отвечает: Pinkbyte
Здравствуйте, Whiteman!

У вас какая строка? Если ASCIIZ - делайте cmp [si],0. Если строка оканчивается знаком $ - cmp al,'$'. Не могу понять вашу проблему... У меня после изменения все заработало...
---------
Нейтральность - высшее достижение сознания
Ответ отправил: Pinkbyte (статус: 2-ой класс)
Ответ отправлен: 22.10.2006, 16:08


Вопрос № 59.597
Как мне запустить (откомпилировать) следующую программу:

mov eax, 0b2h

Прошу пошаговой инструкции. За хорошие ответы оценки гарантирую.
Отправлен: 20.10.2006, 18:20
Вопрос задал: NiGHT (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 10)

Отвечает: ENS
Здравствуйте, NiGHT!
Это все делается не ради оценок. Если я правильно понял ты хочешь сделать программу которая выполняет всего одну
инструкцию. Тогда надо в любом текстовом редакторы набрать:
;----------------------------------------------------------------------
CSEG segment ;начало нашего семента CSEG
org 100h ;сообщаем что программы COM(данные код в одном сегменте)
Start: ;метка начала программы
mov eax, 0b2h ;Ваша инструкция, можете написать и другие инструкции
ret ;выходим из программы
CSEG ends ;конец сегмента
end Start ;конец программы
;----------------------------------------------------------------------
Далее сохраняем все это дело как prog.asm(или не prog, а как хотите) и компилируем
для TASMа
tasm prog.asm - создаем объектный код
tlink prog.obj /x/t - делаем исполняемых файл
Для MASMа
ML.EXE PROG.ASM /AT
У нас получился prog.COM
заходим в DOS и запускаем
ВСЁ!

---------
Если нет выхода ищу вход.
Ответ отправил: ENS (статус: 7-ой класс)
Ответ отправлен: 20.10.2006, 19:22
Оценка за ответ: 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.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное