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

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.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
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
Отписаться
Убрать рекламу

В избранное