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

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


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

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

Выпуск № 558
от 28.09.2006, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 349, Экспертов: 30
В номере:Вопросов: 5, Ответов: 10


Вопрос № 56437: Здравствуйте уважаемые эксперты. Вопрос относится к Win32. Вот я выделил память записал туда файл как мне обратиться в этой выделенной памяти, что бы на пример вывести 21 символ. --------------------- Я надеюсь на вас...
Вопрос № 56442: Добрый день уважаемые эксперты! Решил ввести на экран первые 2 символа строки Hello, world! Вот программма: CSEG segment org 100h Begin: mov ah,9 mov dx,word ptr My_string int 21h int 20h My_string db 'Hello, ...
Вопрос № 56447: Здравствуйте эксперты. Что быстрее WM_CHAR or SetAsyncKeyState? Или есть что то быстрее. Я на вас надеюсь....
Вопрос № 56467: Подскажите пожалуйста, можно открыв программу в xeh редакторе заменит какие-либо команды другими, при этом сохранив работоспособность редактируемой программы? И если можно подскажите какие команды можно заменять и чем!...
Вопрос № 56472: Добрый день уважаемые эксперты! Неподскажите ли существуют ли и где можно скачать какие-нибудь средства разработки под Symbion и эмулятор Symbion под ПК, а так же соотвествующую документацию?...

Вопрос № 56.437
Здравствуйте уважаемые эксперты.
Вопрос относится к Win32.
Вот я выделил память записал туда файл как мне обратиться в этой выделенной памяти, что бы на пример вывести 21 символ.
---------------------
Я надеюсь на вас
Отправлен: 23.09.2006, 15:07
Вопрос задал: ENS (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n0name
Здравствуйте, ENS!
Вообще-то проще использовать FileMapping, но если уже сделали так, то обратиться можете примерно так:
mov eax, [pMem]
mov edx, [eax + 21]

Где pMem - переменная, в которой вы храните адрес памяти.
Синтаксис фасма, для других ассемблеров вместо [pMem] просто pMem.
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 23.09.2006, 15:32


Вопрос № 56.442
Добрый день уважаемые эксперты!
Решил ввести на экран первые 2 символа строки Hello, world! Вот программма:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,word ptr My_string
int 21h
int 20h
My_string db 'Hello, world!$'
CSEG ends
end Begin
Получается какой-то мусор.В отладчике проверил вроде бы в dx загружается верный адрес:
mov ah,09
mov dx,cs:[010B]
int21
int20 Где ошибка?
Отправлен: 23.09.2006, 16:07
Вопрос задал: Maksim/max (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Луковкин Николай Иванович
Здравствуйте, Maksim,V,I/max!
Почему у Вас не получается? Все получается!
Вашу программу я переписал в свой редактор (использую оболочку FAR), использую ассемблер MASM. В командной строке набрал cmake _имя программы_, после чего нажал enter и все файлы получились: obj,com,exe! Что еще надо?
---------
Главным критерием эффективности того или иного пути может служить лишь то, достиг или нет крекер конечного результата!!!
Ответ отправил: Луковкин Николай Иванович (статус: 1-ый класс)
Ответ отправлен: 23.09.2006, 17:20
Оценка за ответ: 3
Комментарий оценки:
файлы то получаются а вот на экране первых 2 букв нет только мусор

Отвечает: ENS
Здравствуйте, Maksim,V,I/max!
Ошибка непременно в 5 строке(mov dx,word ptr My_string).
MyString это массив из байтов,а не переменная WORD.
MyString -это 1 байт(H) он не может быть словом.
MyString+1 - это тоже 1 байт(e) .
Надо либо выводить другой функцией либо напролом в видепамять.
Глянь пример
Надеюсь я тебе помог.

Приложение:

---------
Учение - свет!

Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 23.09.2006, 17:31
Оценка за ответ: 4
Комментарий оценки:
Программа не работает error A2001:immediate operand not allowed

Отвечает: Олег Владимирович
Здравствуйте, Maksim,V,I/max!

На мой взгляд, тут две ошибки: сначала, надо mov dx,word ptr My_string заменить на mov dx,OFFSET My_string, а затем, вспомните: функция 9 требует указания адреса строки в DS:DX, а DS указывает на префикс программного сегмента. Надо добавить push cs и pop ds.

Удачи
---------
Факультет ПМ-ПУ - лучший в СПбГУ!
Ответ отправил: Олег Владимирович (статус: 3-ий класс)
Ответ отправлен: 23.09.2006, 23:55

Отвечает: Стас
Здравствуйте, Maksim,V,I/max!
Все очень просто.
Вызывая int21h ah=9 в DX должен быть адрес строки символов которую нужно вывести на экран. Вы в DX помещаете символы "He" в надежде вывести их на экран.
Но ДОС об этом не догадывается, он прилежно выводит на экран кусок памяти на который указывает DX - вот и мусор.

Если же вы желаете выводить сообщение посимвольно, нужно воспользоваться другой, рассчитаной именно на символьный вывод, функцию, например int21h ah=2.
При этом символ который нужно вывести на экран помещается в DL:

CSEG segment
org 100h
Begin:
mov ah,2
mov bx,offset My_string
mov dl,[bx]
int 21h

inc bx
mov dl,[bx]
int 21h

int 20h
My_string db 'Hello, world!$'
CSEG ends
end Begin
Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 24.09.2006, 00:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 56.447
Здравствуйте эксперты.
Что быстрее WM_CHAR or SetAsyncKeyState? Или есть что то быстрее.
Я на вас надеюсь.
Отправлен: 23.09.2006, 17:02
Вопрос задал: ENS (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n0name
Здравствуйте, ENS!
WM_CHAR это уведомление окна о том что была нажата клавиша.
SetAsyncKeyState - такой функции не существует, есть SetKeyboardState.
WM_CHAR и SetKeyboardState выполняют разные задачи, и некорректно сравнивать их. Если вы имеете ввиду, в каком случае чужое приложение отреагирует быстрее, то WM_CHAR.
Ответ отправил: n0name (статус: 6-ой класс)
Ответ отправлен: 23.09.2006, 17:43


Вопрос № 56.467
Подскажите пожалуйста, можно открыв программу в xeh редакторе заменит какие-либо команды другими, при этом сохранив работоспособность редактируемой программы? И если можно подскажите какие команды можно заменять и чем!
Отправлен: 23.09.2006, 20:08
Вопрос задал: Ilya_Ivanov (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Стас
Здравствуйте, Ilya_Ivanov!
Можно.
Вариант 1: Можно полностью переписать всю программу, чтобы она делала то же самое и выглядела так же, но код уже будет Ваш.

Вариант 2: можно заменить коды типа 31h c0h - что означает xor ax,ax на 29h c0h что, в свою очередь, значит sub ax,ax - по сути и то и это- обнуление регистра AX.
Или, например, команду mov ax,bx (89h d8h) заменить парой push bx(53h) pop ax(58h). По сути это значит поместить в AX значение регистра BX. В первом случае напрямую, во втором через стек.
(Имейте в виду, что в редких случаях такие штуки не пройдут, но это в основном когда программист пытается защитить программу или сделать её самомодифицирующейся).

Вариант 3: Можно взять отдельный кусок программы (от байта до ....), проанализировать его и написать взамен свой (теоретически желательно уместить его в тот же размер, но вообще есть варианты). Так можно снять защиту (Trial), к примеру, или сделать себя в какой- нибудь игрушке неубиваемым.

Ответ отправил: Стас (статус: Специалист)
Ответ отправлен: 24.09.2006, 02:47

Отвечает: ENS
Здравствуйте, Ilya_Ivanov!
Команды заменять можно. Надо только знать адрес начала команды, что бы не затереть другую.
Таким образом можно заменнить кусок программы. К примеру je на jne. Меняются команда на эквиваленты с меньшим количеством тактов.
Можно не только сохранить работоспособность но и повысить быстродействие.Но надо внимательно смотреть на байты.


---------
Учение - свет!
Ответ отправил: ENS (статус: 2-ой класс)
Ответ отправлен: 24.09.2006, 12:13

Отвечает: Jekyll
Здравствуйте, Ilya_Ivanov!

Можно. обычно меняют джампы :) условные на безусловные. еще можно дописывать в программу код, а еще... предлагаю почитать доки по вирусологии и краку. тогда многое станет ясно.

//
www.wasm.ru - там можно многое почерпнуть
Ответ отправил: Jekyll (статус: 2-ой класс)
Ответ отправлен: 24.09.2006, 16:40


Вопрос № 56.472
Добрый день уважаемые эксперты!
Неподскажите ли существуют ли и где можно скачать какие-нибудь средства разработки под Symbion и эмулятор Symbion под ПК, а так же соотвествующую документацию?
Отправлен: 23.09.2006, 20:38
Вопрос задал: Алексей Смуриков (статус: Практикант)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Wild_one
Здравствуйте, Алексей Смуриков!
На http://www.forum.nokia.com/ можно найти все необходимое: документацию и программы.
Ответ отправил: Wild_one (статус: 5-ый класс)
Ответ отправлен: 23.09.2006, 23:34
Оценка за ответ: 5
Комментарий оценки:
Thanks!!!


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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

В избранное