Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты по данной тематике Номер выпуска: | 1550 | Дата выхода: | 31.10.2013, 02:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 45 / 23 | Вопросов / ответов: | 1 / 1 | Консультация # 187594: Здравствуйте,уважаемые эксперты. Нужно написать программу,желательно используя MASM. Даны две строки: строка1 "F4D531675F637A9745967E883A7AB18E" строка2 "0123456789ABCDEFGHJKLMNPQRTUVWXY" Строку1 нужно разбить на 16 двухбайтных слов и с каждым из слов провести логическую операцию И (AND) c 8000001Fh,тут ж... Консультация # 187594: Здравствуйте,уважаемые эксперты. Нужно написать программу,желательно используя MASM. Даны две строки: строка1 "F4D531675F637A9745967E883A7AB18E" строка2 "0123456789ABCDEFGHJKLMNPQRTUVWXY"
Строку1 нужно разбить на 16 двухбайтных слов и с каждым из слов провести логическую операцию И (AND) c 8000001Fh,тут же прибавляя к каждому из 16 получившихся значений единицу.Каждый получившийся р-тат-- это смещение в строке2,по которому нужно взять символ,и,когда их наберётся 16,в виде строки вывести на экран (в данном случае это "LMH7Y3TP5NX8TTHE"). Спасибо.
Дата отправки: 27.10.2013, 15:16 Вопрос задал: Сергей (Посетитель) Всего ответов: 1 Страница онлайн-консультации » Консультирует Лысков Игорь Витальевич (Старший модератор): Здравствуйте, Сергей! Т.к. в данном примере число исходных данных ровно столько, сколько надо, то проверка на 16 байт отсутствует. Это легко добавляется. Демонстрируется сама идея обработки данных. Примерно так:
Код : .386 model flat, stdcall option casemap :none ;подключаем необходимые inc-файлы include \masm32\include\windows.inc ;include \masm32\include\user32.inc include \masm32\include\kernel32.inc ;и библиотеки ;includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib ;прототипы функций StdOut PROTO :DWORD, :DWORD GetNibble PROTO GetNum PROTO CalcText PROTO :DWORD, :DWORD, :DWORD ;стек .stack 1024 ;сегмент данных .data sMD5 db "F4D531675F637A9745967E883A7AB18E" lenMD5 equ ($-sMD5)/2 ;количество данных sData db "0123456789ABCDEFGHJKLMNPQRTUVWXY" sTitle db "Decoding text: " .data? sText db 256 dup (?) ;сегмент кода .code main proc local hOutPut:DWORD ;описатель стандартного выходного устройства ;получаем handle устройства invoke GetStdHandle, STD_OUTPUT_HANDLE mov hOutPut, eax ;выводим "Decoding text: " invoke StdOut, hOutPut, addr sTitle invoke CalcText, addr sMD5, lenMD5, addr sText ;выведем строку invoke StdOut, hOutPut, addr sText ;выход invoke ExitProcess, NULL main endp GetNibble proc ;hex-символ в hex-число 0-f lodsb sub al, '0' cmp al, 9 ;0-9 ? jbe GetNibbleRet sub al, 'A'-'0'-0ah ;A-F GetNibbleRet: ret GetNibble endp GetNum proc ;два hex-символа в байт call GetNibble shl al, 4 mov ah, al call GetNibble or al, ah ret GetNum endp CalcText proc uses esi ecx edi, pMD5:DWORD, iCount:DWORD, pText:DWORD mov esi, pMD5 ;адрес массива mov ecx, iCount ;его длина mov edi, pText CalcTextLoop: call GetNum and eax, 0000001fh mov al, sData[eax] stosb loop CalcTextLoop mov byte ptr [edi], 0 ;закроем строку нулем для вывода ret CalcText endp ;вывод строки на стандартное выходное устройство ;параметр - адрес строки StdOut proc hOutPut:DWORD, lpszText:DWORD ;локальные переменные в стеке LOCAL bWritten:DWORD ;количество выведенных символов LOCAL len:DWORD ;длина строки ;получаем длину строки invoke lstrlen, lpszText mov len, eax ;выводим invoke WriteFile, hOutPut, lpszText, len, ADDR bWritten, NULL ;возвращаем количество выведенных символов mov eax, bWritten ret StdOut endp end main
Оценить выпуск | Задать вопрос экспертам главная страница | стать участником | получить консультацию техническая поддержка | восстановить логин/пароль Дорогой читатель! Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно! МЫ РАБОТАЕМ ДЛЯ ВАС! |
Комментариев нет:
Отправить комментарий