Вопрос № 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:
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 редакторе заменит какие-либо команды другими, при этом сохранив работоспособность редактируемой программы? И если можно подскажите какие команды можно заменять и чем!
Отвечает: Стас
Здравствуйте, 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 под ПК, а так же соотвествующую документацию?