Вопрос № 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!
--------- Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Есть конкретная цель:
программный захват изображения экрана 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