Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 542
от 13.05.2003, 07:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 3196 Отправлено ответов: 9347 Активность: 292.4 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Broken Sword Статус: Профессиональный Общий рейтинг: 122.97 URL: моя рассылка по Protected Mode [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 150.49 URL: Программирование [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 133.73 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
Lynx Статус: Доверительный Общий рейтинг: 141.3 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 119.03 [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 108.23 URL: Страничка обо мне и моих друзьях Телефон: +7 902 168 02 65 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 139.49 [Подробней >>] |
Hangatyr Статус: Опытный Общий рейтинг: 123.68 [Подробней >>] |
Ramzes Статус: Опытный Общий рейтинг: 127.2 URL: Microsoft homepage [Подробней >>] |
_vt Статус: Начальный Общий рейтинг: 115.62 [Подробней >>] |
Pin Статус: Доверительный Общий рейтинг: 126.27 [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 112.45 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
Tigran K. Kalaidjian Статус: Опытный Общий рейтинг: 115.34 URL: Методы оптимизации работы ПК [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 3145. Здравствуйте уважаемые Эксперты! Заранее скажу, что писать для(за) меня ничего не нужно. А хотелось ... (ответов: 3)
Вопрос № 3146. Здравствуйте, уважаемые Эксперты! Извините, конечно, за глупый вопрос, но что-то он мне покоя не дае... (ответов: 3)
Вопрос № 3147. Начинаюший. Как мне написать 2 процедуры (ввод и вывод), обеспечивающих работу с целыми десятичными ... (ответов: 3)
Вопрос № 3149. Здравствуйте Пытаюсь написать программу устанавливающую системный хук, и для этого пишу DLL. В Iczel... (ответов: 1)
Вопрос № 3150. Все желающие развентить миф о превосходстве линуха над виндой приглашаются на форум http://rusfaq.ru... (ответов: 1)
Вопрос № 3153. Здравтсвуйте, глубокоуважаемые Эксперты! У меня к вам накопилось несколько вопросиков: 1)Прокомменти... (ответов: 5)
Вопрос № 3154. Здраствуйте. Вот такой вопросик. 1.В win2k и выше все говорят уровень абстрагировния от устройств, н... (ответов: 1)
Вопрос № 3155. Приветствую всех! У меня такой вопрос: как из произвольного выполняемого файла или библиотеки извлеч... (ответов: 7)
Вопрос № 3156. Здраствуйте еще раз! У меня еще один вопрос. Как в ассме объявлять и использовать структуры (пользо... (ответов: 4)
Вопросов: 9, ответов: 28
Вопрос № 3145 |
Здравствуйте уважаемые Эксперты!
Заранее скажу, что писать для(за) меня
ничего не нужно.
А хотелось бы следующего:
1)Нужна грамматика языка Ассемблер(Tasm) для
использования в lex и yacc при написании синтаксического анализатора.Итоговая цель - написание программы переводящей файл на Tasm'е в файл на As(ассемблер Unix).
2)Предложения, советы и информацию, относящуюся к этому вопросу просьба кидать на мыло: thorin3@pisem.net
Заранее всех благодарю.
Вопрос отправлен: 07.05.2003, 13:56
Отправитель: Thorin (thorin3@pisem.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Здравствуйте, Thorin!
А понту? Все равно переносимости ты при этом не получишь - исходник придется на 90% переделывать заново (имеются ввиду сис. вызовы);
с алгоритмами тоже спорно - Unix полностью 32-х разрядная ОС работающая в защ. режиме. ТАСМ изначально ориентирован на 16-битные приложения ДОС. Т.е. регистры, переменные - много неоднозначностей выйдет.
Ну разве что ради того чтобы что нибудь написать...
Ответ отправлен: 07.05.2003, 17:45
Отправитель: Broken Sword
Отвечает Bob Johnson
Добрый день, Thorin!
Ну это, в принципе, не сложно. Я пользовался когда-то flex'ом и с его помощью очень легко решить такую задачу. Из грамматики в асме особо ничего нет - мекти, команды, префиксы и параметры... Да, еще комментарии.
Ответ отправлен: 07.05.2003, 22:31
Отправитель: Bob Johnson
Отвечает Maverick
Добрый день, Thorin!
У Юрова в практике были небольшие примерчики.
Ответ отправлен: 08.05.2003, 06:27
Отправитель: Maverick
Вопрос № 3146 |
Здравствуйте, уважаемые Эксперты!
Извините, конечно, за глупый вопрос, но что-то он мне покоя не дает. Я последнее время
стал часто сталкиваться с понятием дZен. Что это такое? Видно, я что-то пропустил из истории
программирования? Вот, решил спросить - кому уж знать, как не вам?
Премного Благодарен.
Вопрос отправлен: 07.05.2003, 15:03
Отправитель: IS
[Следующий вопрос >>] [Список вопросов]
Отвечает Lynx
Добрый день, IS!
Насколько я понимаю, то дZен - это оптимизация кода по размеру, в тех вещах, где она нафиг не нужна. Ну скажем ты сидишь 3 ночи подряд над своим ассемблерным листингом, что бы сэкономить 1-2 байта памяти. :))) Во всяком случае во всех статьях про дZен, которые я читал, писали именно об этом. ;)
Ответ отправлен: 07.05.2003, 21:04
Отправитель: Lynx
Отвечает Ayl
Приветствую Вас, IS!
Вообще-то это больше к истории религии относится, а не к программированию. Dzen - это, если по-простому, созерцание. А вот что под этим скрывается в программировании - вопрос достаточно интересный. Можешь на www.subscribe.ru посмотреть рассылку "Низкоуровневое программирование для дZенствующих" (код рассылки - comp.soft.prog.hitech).
Ответ отправлен: 07.05.2003, 16:38
Отправитель: Ayl
Отвечает Maverick
Здравствуйте, IS!
Ну это типа медитация(выходишь на астральный уровень и тебе говорят где можно байты срезать), вообще, как я представляю, это абстрактное понятие...можно понимать по разному, извращение, сумасшествие и т.д. :)
Ответ отправлен: 08.05.2003, 06:28
Отправитель: Maverick
Вопрос № 3147 |
Начинаюший.
Как мне написать 2 процедуры (ввод и вывод), обеспечивающих работу с целыми десятичными числами без знака в диапазоне 0-65535
Вопрос отправлен: 07.05.2003, 15:25
Отправитель: Дима
[Следующий вопрос >>] [Список вопросов]
Отвечает Lynx
Добрый день, Дима!
Помоему такие вопросы уже были... Поковыряй рассылку.
Ответ отправлен: 07.05.2003, 21:03
Отправитель: Lynx
Отвечает Bob Johnson
Здравствуйте, Дима!
Тебе нужны будут две процедуры - перевод строки в число и перевод числа в строку. Для первой используется последовательное умножение на 10, для второй - последовательное деление на 10. Посмотри рассылку, я здесь уже не раз давал код таких процедур.
Ответ отправлен: 07.05.2003, 22:31
Отправитель: Bob Johnson
Отвечает Maverick
Здравствуйте, Дима!
С помощью рук, головы и господа Бога...
А что не получается? Прерывания вызывать или комп не включается?
Для ввода вообще нифига не надо...
При выводе нужно будет перевести число в 10ричную систему, преобразовать в ascii и выводить.
Тут все равно никто этого писать не будет, укажи где проблема и помогут.
Хех, я поначалу даже лабы некоторым делал, потом надоело.
P.S. Если лень самому писать, поройся в архиве рассылки, нужное тебе неск-раз встречалось.
Ответ отправлен: 08.05.2003, 06:28
Отправитель: Maverick
Вопрос № 3149 |
Здравствуйте
Пытаюсь написать программу устанавливающую системный хук, и для этого пишу DLL. В Iczelion: Уроки Win32API написано:
Важная деталь относительно удаленных хуков: хук-пpоцедуpа должна находиться в DLL, котоpая будет пpомэппиpована в дpугой пpоцесс. Когда Windows мэппиpует DLL в дpугой пpоцесс, секция данных мэппиpоваться не будет. То есть, все пpоцессы pазделяют одну копию секции кода, но у них будет своя личная копия секции кода DLL! Это может стать большим сюpпpизом для непpедупpежденного человека. Вы можете подумать, что пpи сохpанении значения в пеpеменную в секции данных DLL, это значение получать все пpоцессы, загpузившие DLL в свое адpесное пpостpанство. Hа самом деле, это не так. В обычной ситуации, такое поведение пpавильно, потому что это создает иллюзию, что у каждого пpоцесса есть отдельная копия DLL. Hо не тогда, когда это касается хуков Windows. Hам нужно, чтобы DLL была идентична во всех пpоцессах, включая данные. Решение: вы должны пометить секцию данных как pазделяемую. Это можно сделать, указав аттpибуты секции линкеpу. Если pечь идет о MASM'е, это делается так:
/SECTION:, S
Имя секции инициализиpованных данных '.data', а неинициализиpованных - '.bss'. Hапpимеp, если вы хотите скомпилиpовать DLL, котоpая содеpжит хук-пpоцедуpу, и вам нужно, что секция неинициализиpованных данных pазделялась между пpоцессами, вы должны использовать следующую команду:
link /section:.bss,S /DLL /SUBSYSTEM:WINDOWS ..........
Аттpибут 'S' отмечает, что секция pазделяемая.
Однако я пишу на Тасме и поэтому хочу спросить не знает ли кто-нибудь как это реализовать на Тасм? Получается что нужны 2 сегмента данных, один разделяемый (single) и другой - различный для разных процессов (multiple).
St
Вопрос отправлен: 07.05.2003, 16:19
Отправитель: St (st23@yandex.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Здравствуйте, St!
В .def файле помечаешь сегмент как SHARED. На мыло скинул пример.
Ответ отправлен: 07.05.2003, 17:23
Отправитель: Gibbel
Вопрос № 3150 |
Все желающие развентить миф о превосходстве линуха над виндой приглашаются на форум
http://rusfaq.ru/cgi-bin/Forum.cgi?Action=ShowOpin&Number=188&Forums=All&Qty=25&Sort=
Вопрос отправлен: 07.05.2003, 22:11
Отправитель: Broken Sword (brokensword@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, Broken Sword!
Встречаем...
Ответ отправлен: 08.05.2003, 01:31
Отправитель: Bob Johnson
Вопрос № 3153 |
Здравтсвуйте, глубокоуважаемые Эксперты!
У меня к вам накопилось несколько вопросиков:
1)Прокомментируйте и разъясните, плиз, секцию .idata в приложении (это один из фасмовских примеров). Я тут абсолютно ничего не понял.
2)Где можно достать русскую базу для справочника NG?
3)При работе с IDA 3.75 я нормально дизассемблирую файл (все метки на месте), но при сохранении его как *.asm часть меток теряется и файл не компилируется. Можно это как-нибудь подправить?
4)В "Ассемблер - это просто..." во всех примерах встречается следующее:
CSEG segment
Begin:
............
CSEG ends
end Begin
Почему они не вложены друг в друга?
5)Как преобразовать полученные скан-коды клавиатуры в ASCII-коды?
Приложение:
Вопрос отправлен: 08.05.2003, 17:40
Отправитель: elm thasa (rix@vlink.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Здравствуйте, elm thasa!
4.
CSEG segment ;объявление сегмента
Begin: ;метка начала программы (может быть что угодно, а не только Begin)
.........
CSEG ends ;конец сегмента
end Begin ;конец программы, старт программы осуществлять с метки Begin
5. По таблице.
Ответ отправлен: 08.05.2003, 18:36
Отправитель: Gibbel
Отвечает masquer
Добрый день, elm thasa!
1. idata обычно хранит в себе таблицу импорта. Формат смотри в любом описании PE. Я скорее нулями и единичками писать прогу буду, чем на ассемблере с таким синтаксисом что-делать.
Ответ отправлен: 08.05.2003, 18:44
Отправитель: masquer
Отвечает Hangatyr
Добрый день, elm thasa!
1. А что в FASM'е надо вручную задавать параметры секций? Хм... Фактически ты тут сам создаешь все секции вместо компоновщика, т.е. указываешь что и из каких модулей импортировать, короче, почитай описание формата PE и сразу все встанет на свои места, но если кратко - после задания параметров секции начинается массив описаний используемых библиотек первые три элемента - нули (первый равен 0 потому что имеется две копии массива адресов и первая не используется, а он как раз на нее и ссылается), четвертый - указывает на строку с именем библиотеки, ну а пятый указывает на начало jump-table, а это опять же массив указателей на элементы массива адресов, будет заполнен их адресами во время загрузки. dd 0,0,0,0,0 используется для обозначения конца массива описаний Dll.
4. Как понимать "вложены"? begin - точка входа, а cseg - сегмент...
Ответ отправлен: 08.05.2003, 19:32
Отправитель: Hangatyr
Отвечает Bob Johnson
Приветствую Вас, elm thasa!
4. Здесь Begin - это просто метка (не процедура), соответственно закрывать ее не надо (другое дело - begin proc... begin endp - вот тут надо). А последняя директива End _метка_ просто указывает точку входа в программу. Она всегда попадается только в единичном экземпляре, т.к. как только компилятор найдет ее, он перестает ассемблировать файл (т.е. после end можешь что угодно туда написать - работает).
5. Самому, например, с помощью нескольких таблиц по 128 байт - которые будут преобразовывать один и тот же скан код в разные ASCII в зависимости от языка и состояния клавиш типа Alt, Shift, Ctrl etc.
Ответ отправлен: 09.05.2003, 00:13
Отправитель: Bob Johnson
Отвечает Ramzes
Приветствую Вас, elm thasa!
1. по моему там описаны два указателя
первый на таблицу адресов импортируемых функций, второй на таблицу их имен
Ответ отправлен: 09.05.2003, 16:51
Отправитель: Ramzes
Вопрос № 3154 |
Здраствуйте.
Вот такой вопросик.
1.В win2k и выше все говорят уровень абстрагировния от устройств, ну
толком не кто так не объяснил что это такое. Может разъясните?
2.В догонку зачем в NT нужен ntdetect.com если используется hal.dll который
и есть ответ на первый вопрос.
3.Могу ли я в защищенном режиме там где находится BIOS очистить эту часть памяти.
Вроде она там и не нужна.
Вопрос отправлен: 08.05.2003, 23:31
Отправитель: sw
[Следующий вопрос >>] [Список вопросов]
Отвечает _vt
Добрый день, sw!
1) и 2) ntdetect.com используется только при загрузке NT: собирает данные о устройствах, к которым впоследствии обращается напрямую только ядро, в частности hal.dll .
Это и есть абстрагирование от конкретных устройств...
3) А почему нет?
Ответ отправлен: 09.05.2003, 01:44
Отправитель: _vt
Вопрос № 3155 |
Приветствую всех!
У меня такой вопрос:
как из произвольного выполняемого
файла или библиотеки извлечь зависимости
(export-import таблицу) от других
файлов (библиотек и др.).
С уважением, Sammy.
ЗЫ: что такое dZенствующие
Вопрос отправлен: 09.05.2003, 07:38
Отправитель: sammy (sfxgt666@yahoo.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Hangatyr
Доброе время суток, sammy!
1. Разбираешь PE (если это PE)заголовок, находишь таблицу секций - поле +14h определяет место, где в файле хранятся данные для секции, далее разбираешь саму секцию. Короче, долго рассказывать - читай описание соответствующего формата.
Ответ отправлен: 09.05.2003, 10:38
Отправитель: Hangatyr
Отвечает Lynx
Здравствуйте, sammy!
Да любой редактор ресурсов тебе такую информацию на счёт раз покажет.
Ответ отправлен: 09.05.2003, 11:36
Отправитель: Lynx
Отвечает masquer
Приветствую Вас, sammy!
Ежели программно интересует - то формат РЕ даст ответ на вопрос, а ежели просто посмотреть - с Visual Studio идет классная прога - DependencyWalker.
Ответ отправлен: 09.05.2003, 15:33
Отправитель: masquer
Отвечает Bob Johnson
Здравствуйте, sammy!
Можно воспользоваться программой W32Disasm - это дизасм/отладчик, который показывает список импортируемый и экспортируемых функций. Если же тебе это надо внутри программы узнать - смотри формат PE файла.
Ответ отправлен: 09.05.2003, 16:34
Отправитель: Bob Johnson
Отвечает Ramzes
Здравствуйте, sammy!
таблицы импорт/экспорта находятся в секциях .idata/.edata соответственно. Их описание найдешь в туториалах Iczelion-a, которые находятся на www.wasm.ru.
Ответ отправлен: 09.05.2003, 16:54
Отправитель: Ramzes
Отвечает Pin
Добрый день, sammy!
Используй утилы типа TDump (Delphi, C++Builder, VS)
Ответ отправлен: 11.05.2003, 00:24
Отправитель: Pin
Отвечает baldr
Доброе время суток, sammy!
dZен - это просто шутливая "религия" программеров. :)
Ну, не знаю как точнее объяснить... Программинг похож, ведь,порой, на какое-то шаманство! :)) Когда пишешь прогу и она сначала не работает, ты молишься на каждый байт кода, а она, наконец, выполняет все, что ты хочешь и ты опускаешься в нирвану! :)
Типа, так...
Ответ отправлен: 12.05.2003, 12:08
Отправитель: baldr
Вопрос № 3156 |
Здраствуйте еще раз!
У меня еще один вопрос.
Как в ассме объявлять и использовать
структуры (пользовательские и
стандартные системные).
Скажем, в паскале делал так:
//объявление
sss = record
a:integer;
s:array [1..100] of char;
end;
//создание переменной
var q:sss;
//доступ к полям структуры
q.a := 100;
А стандартными структурами я называю
структуры типа _SYSTEMTIME.
ЗЫ: низкоуровнивать - это оргазм!
Вопрос отправлен: 09.05.2003, 07:39
Отправитель: sammy (sfxgt666@yahoo.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Tigran K. Kalaidjian
Приветствую Вас, sammy!
Формат описания записи:
Имя_записиси RECORD Описание_элементов
Описание элементов имеет следующий формат:
Имя_поля : Размер=Значение_по_умолчанию
Значение вводить не обязательно.
Пример:
proga RECORD data:2, name:2, size:8=123 ; описание типа данных
Myprog proga <3, 13,> ;определение переменной, притом третье поле оставляем по умолчанию
Для работы можно использовать следующие команды:
1. установка значения поля записи
setfield имя_элементa_записи назначение, регистр_источник
2. выборка значения поля записи
getfield имя_элементa_записи регистр_назначение, источник
пример работы с записью:
MOV AL, Myprog
GETFIELD DATA BL, AL ;Добавляем к значению поля data единицу
INC BL
SETFIELD DATA AL, BL
Подробнее см. Юрова Урок 12
Ответ отправлен: 10.05.2003, 14:05
Отправитель: Tigran K. Kalaidjian
Отвечает Hangatyr
Доброе время суток, sammy!
somestr STRUCT
first WORD ?
second DWORD ?
somestr ENDS
;_сегмент_данных_
sss somestr <>
;_сегмент_кода_
assume ecx: ptr somestr
mov [ecx].first, 0
assume ecx:nothing
Ответ отправлен: 09.05.2003, 10:38
Отправитель: Hangatyr
Отвечает Lynx
Добрый день, sammy!
Например структуру из твоего вопроса на асме можно описать так:
//объявление
sss struct
a dw ?
s db 100 dup (?)
sss ends
//создание переменной
q sss<> ;<> - это значит, что все значения по умолчанию
//доступ к полям структуры
mov q.a, ax
Вот и всё, вобщем то ничего сложного нет, всё тоже самое, что и в паскале.
Ответ отправлен: 09.05.2003, 11:36
Отправитель: Lynx
Отвечает Bob Johnson
Добрый день, sammy!
Объявление:
_имя_ struct
поле db/dw/dd/... ?
...
_имя_ ends
создание переменной:
v _имя_ <> - без инициализации
v _имя_ {поле1=знач1, поле2=знач2...} - с произвольной инициализацией по имени.
v _имя_ <знач1, знач2, ...> - с последовательной инициализацией полей.
доступ:
mov eax, [ebx + _имя_.поле]
или еще много других вариантов.
Самое главное (и, к сожалению, отстойное) - это то, что поля структуры считаются глобальными определениями - т.е. никакие две структуры не могут иметь двух полей с одинаковыми именами...
Ответ отправлен: 09.05.2003, 16:34
Отправитель: Bob Johnson
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (37) C / C++ (29) Perl (5) Builder / Delphi (15) Pascal (29) Basic / VBA (12) Java / JavaScript (10) PHP (6) MySQL / MSSQL (4) |
Пользователю Windows 95/98/Me (39) Windows NT/2000/XP (30) "Железо" (27) Поиск информации (12) |
Администратору Windows NT/2000/XP (18) Linux / Unix (9) |
Юристу Гражданское право (7) Семейное право (4) Трудовое право (5) КоАП (4) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
© 2003 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||