Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 460
от 05.01.2003, 15:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 2339 Отправлено ответов: 7011 Активность: 299.7 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Sensey Статус: Профессиональный Общий рейтинг: 121.61 URL: Страничка рассылки по Паскалю Телефон: +38 (0572) 41-76-04 д. [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 139.5 URL: Задачи по ассемблеру Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
LIFO Статус: Профессиональный Общий рейтинг: 119.89 URL: наш сайт Телефон: 8 01710 24758 [Подробней >>] |
Traish Статус: Опытный Общий рейтинг: 127.8 [Подробней >>] |
kvINT Статус: Профессиональный Общий рейтинг: 105.96 Телефон: (34316)2-31-45 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 127.45 URL: моя рассылка по Protected Mode [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 152.2 [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 147.27 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 117.4 [Подробней >>] |
Blad Статус: Начальный Общий рейтинг: 102.25 [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 108.21 URL: Страничка обо мне и моих друзьях [Подробней >>] |
keleb-glin Статус: Опытный Общий рейтинг: 111.3 [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 118.44 [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 114.72 URL: Мой сайтик... [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 2304. Здравствуйте, Эксперты!!! 1) Подскажите, пожалуйста, как на Асме сделать задержку (типа Delay в Pasc... (ответов: 5)
Вопрос № 2306. С Новым Годом! Вопросы такие: 1.) lea dx,[bp+offset COMmask] Как я понял, берем COMmask,... (ответов: 6)
Вопрос № 2307. С НОВЫМ ГУДОМ, эксперты и подписчики, и всего-всего вам. Удачи!... (ответов: 2)
Вопрос № 2308. ПОМОГИТЕ! В результате взаимодействия одной dll c моей программой её ( dll ) данные ( что в .data ) ... (ответов: 2)
Вопрос № 2309. С Новым Годом! Всех!!!! Поставил SoftICE 4.05(Driver Studio 2.0 кажется) на Windows 98SE Rus Выбрал ... (ответов: 3)
Вопрос № 2310. Hi ! Нашел в Интернете файл с расширением fnt файл шрифтов (int 1Fh). Файл шрифтов, проб... (ответов: 3)
Вопрос № 2311. Приветствую, товарищи эксперты! Занимаюсь я значит мазахизмом, то есть пытаюсь писать проги в машинн... (ответов: 3)
Вопрос № 2312. Здравствуйте эксперты. Вопросик такой: нужно сделать так, что-бы при нажатии опред. клавиши флаг tf ... (ответов: 5)
Вопросов: 8, ответов: 29
Вопрос № 2304 |
Здравствуйте, Эксперты!!!
1) Подскажите, пожалуйста, как на Асме сделать задержку (типа Delay в Pascal-е);
2) Может мне кто-нить скинуть на мыло библиотеки Paskal-я (System, CRT, Graph и т.д.) на Асме (если таковые существуют) или дать URL (Начал изучать Assembler и жутко захотелось узнать, как выглядят команды Pascal-я на Асме).
Заранее спасибо, Sinus (sinus@nm.ru).
P.S.: С наступающим Новым Годом!!!
Вопрос отправлен: 31.12.2002, 02:26
Отправитель: Sinus
[Следующий вопрос >>] [Список вопросов]
Отвечает Sensey
Доброе время суток, Sinus!
1. Можно через таймер, а можно немного проще - через счетчик в БИОСе по адресу 40h:6Ch - с точностью 1\18 сек
2. Поставь IDA Pro (все равно надо ее учить) - дизасемблируй прогу на Паскале и смотри.
ЗЫ Аналогично!
Ответ отправлен: 02.01.2003, 12:03
Отправитель: Sensey
Отвечает Maverick
Приветствую Вас, Sinus!
Можешь сделать холостой цикл или используй прерывание.
mov cx,0ffh
loop $
Ответ отправлен: 31.12.2002, 16:40
Отправитель: Maverick
Отвечает LIFO
Приветствую Вас, Sinus!
mov cx,3000
aa:
loop aa
Или ah=86h int 15h
Ответ отправлен: 31.12.2002, 12:24
Отправитель: LIFO
Отвечает Traish
Добрый день, Sinus!
1. Если пишешь под DOS, можно использовать функцию 86h преывания 15h.
2. Не знаю, существует ли такие библиотеки. Если хочешь узнать, во что компилятор превращает команды паскаля - напиши программу и дизассемблируй ее.
Ну, и с наступающим, ессно.
Ответ отправлен: 31.12.2002, 08:40
Отправитель: Traish
Отвечает kvINT
Добрый день, Sinus!
Пример из Юрова:
макрос задержки - на входе значение задержки в мкс
delay macro time
local ext,iter
push cx
mov cx,time
ext:
push cx
mov cx,5000
iter:
loop iter
pop cx
loop ext
pop cx
endm
Вызывается так delay 1 - задержка на 1 мкс
На самом деле будет не 1 - зависит от процессора, пример сделан для Pentium
Ответ отправлен: 03.01.2003, 02:20
Отправитель: kvINT
Вопрос № 2306 |
С Новым Годом!
Вопросы такие:
1.) lea dx,[bp+offset COMmask]
Как я понял, берем COMmask, с помощью offset получаем смещение, складываем адрес с адресом в bp и получаем значение по этому адресу с помощью []. Потом загружаем в dx адрес этого значения.
Не проще ли так:
mov dx,bp+offset COMmask
2.)Как это работает:
carrier: db 0E9h,0,0 ; jmp start
start: mov bр, sр ; Противоотладочное получение дельта-смещения!
int 0003h ; Int для брикпоинтов
next: mov bp, ss:[bp-6]
sub bp, offset next
3.)
lea si, [bp+offset origdir]
mov byte ptr [si], ''
Ведь так мы затрем первый байт origdir!
За сим откланиваюсь,
DyC.
Вопрос отправлен: 31.12.2002, 16:04
Отправитель: DyC (dyc@nm.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Здравствуйте, DyC!
1. Нет, не проще. Более того, mov dx,bp+offset COMmask - TASM вообще не понимает (это illegal use of constant), еще как-то можно сделать: mov dx,offset [COMmask+bp], но и это не то же самое, что lea dx,[bp+offset COMmask]. lea - загрузить АДРЕС, а mov (даже хоть и offset) в данном случае загрузит СОДЕРЖИМОЕ памяти по адресу [bp]+offset.
2. Это вообще непонятно откуда выдранный кусок... основано может быть хотя бы на том факте, что у данная прога сама перехватывает int 3h.
3. Что-то мы затрем, но точно не origdir. Первая строка равносильна:
lea SI, [BP] + offset origdir, т.е. помещаем в SI число, получаемое путем сложения смещения origdir и слова по адресу BP.
и вообще, где ты понаходил эти вопросы?
Ответ отправлен: 31.12.2002, 19:22
Отправитель: Broken Sword
Отвечает Bob Johnson
Добрый день, DyC!
1. Берется смещение COMmask и складывается со значением в bp. Вот это число и загружается в dx. Никакого значения по этому адресу не считывается (просто это тут не нужно). а [] оставлены для единства представления. А вот mov dx, bp + offset вообще не существует, т.к. mov может загружать только конечные числа. Поэтому и существует lea.
Ответ отправлен: 01.01.2003, 21:05
Отправитель: Bob Johnson
Отвечает Traish
Доброе время суток, DyC!
1. Нет, не проще, потому что если бы "bp" было константой, то трансятор вычислил бы сумму и заменил бы эту инструкцию инструкцией mov dx, _значение_, но bp, как известно, - регистр.
2. Собственно, зачем тут int 3 непонятно - или ты повесил свой обработчик на вектор 3, или для остановки отладчиков в ламерских руках (гм...). Ну, а насчет ss:[sp-06] - тут хранится ip иструкции, который ты получаешь инструкцией
mov bp, ss:[bp-6].
3. Скорее всего, если ты правильно вычислил дельта-оффсет.
Ответ отправлен: 02.01.2003, 15:51
Отправитель: Traish
Отвечает Maverick
Приветствую Вас, DyC!
1.BP это дельта смещение виря в данном случае и по второму способу Tasm тебя не поймет.
2.А ты погляди в отладчике и все поймешь.
3.НЕТ, здесь ты запишешь " по адресу из si.
Вообще гляди в отладчике, все вопросы отпадут.
Как реферат?
Ответ отправлен: 31.12.2002, 16:40
Отправитель: Maverick
Отвечает masquer
Добрый день, DyC!
1. Не проще. Во первых тогда уже так
mov dx,offset COMmask
add dx, bp, а во вторых так ты адрес а не значение получишь, и кода больше будет.
2. "Противоотладочное получение дельта-смещения!" - бред...
3. Ну, и...
Ответ отправлен: 03.01.2003, 12:28
Отправитель: masquer
Отвечает Ayl
Здравствуйте, DyC!
1. Нет, не проще. Потому что такой команды, как mov dx, bp + offset COMmask нет в природе. Тем-то и хороша команда lea, что позволяет вот такие вычисления выполнять одной командой. Иначе надо было написать вот так:
mov dx, bp
add dx, offset COMmask
2. Выдранный кусок в таком виде не несет никакой информации, пока не покажешь обработчик прерывания 3. Предполагаю, что это какая-то попытка борьбы с отладочными средствами.
3. Ничего мы не затираем, если только в bp перед выполнением этого куска не находилось значение 0. А так по идее в bp должно находиться смещение прикрепленной программы относительно начальной точки загрузки по умолчанию.
Ответ отправлен: 04.01.2003, 13:06
Отправитель: Ayl
Вопрос № 2307 |
С НОВЫМ ГУДОМ, эксперты и подписчики, и всего-всего вам.
Удачи!
Вопрос отправлен: 31.12.2002, 16:18
Отправитель: Maverick (Maverick@nightmail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Blad
Приветствую Вас, Maverick!
Спасибо, вас также!
Ответ отправлен: 01.01.2003, 14:27
Отправитель: Blad
Отвечает Bob Johnson
Добрый день, Maverick!
Спасибо!
Ответ отправлен: 01.01.2003, 21:06
Отправитель: Bob Johnson
Вопрос № 2308 |
ПОМОГИТЕ!
В результате взаимодействия одной dll c моей программой её ( dll ) данные ( что в .data ) изменяются.
Потом я ставлю ловушку с обработчиком в этой dll. Так вот, когда ловушка срабатывает, и процедура-обработчик начинает выполняться, все данные оказываются ОБНУЛЕНЫ. Это точно не мой глюк. Отладчик ( SoftICE ) показывает то же самое.
Что мне делать? Как сохранить данные ( не в файл )?
И ещё. В MSDN сказано, что процедура-обработчик ловушки должна обязательно находиться в dll. А можно ли пренебречь этим и установить обработчик на процедуру внутри кода программы? И если можно, то что может произойти неприятного?
Вопрос отправлен: 31.12.2002, 17:12
Отправитель: keleb-glin (keleb-glin@xakep.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, keleb-glin!
Ебстественно, данные будут другими. Для ловушек (hook) данные делаются с аттрибутом shareable, т.е. для каждой копии библиотеки будет начальный набор данных. Может сразу в файл кидать, можешь MMF использовать...
Ответ отправлен: 03.01.2003, 12:31
Отправитель: masquer
Отвечает Gibbel
Доброе время суток, keleb-glin!
На будущее, приводи англоязычные названия, а то я с 10го раза понял, что речь о hookах. В общем, твой обработчик hookа выполняется в адресном пространстве перехватываемой программы. Соответственно, для доступа к своим данным необходимо использовать какой-либо метод IPC. Для примера, в твоем случае, необходимо задать секцию .data как shared, что позволит использовать одну и ту же копию данных разными процессами. Как это делается описано в том же MSDN. На русском языке IPC подробно описано в 27 томе Библиотеки Системного Программиста Фроловых (если надо, могу скинуть).
Ответ отправлен: 04.01.2003, 10:27
Отправитель: Gibbel
Вопрос № 2309 |
С Новым Годом! Всех!!!!
Поставил SoftICE 4.05(Driver Studio 2.0 кажется) на Windows 98SE Rus
Выбрал как и рекомендуют Standard Display Adapter (VGA) &
Universal Video Driver. Всё работает. По Ctrl-D выскакивает окошко.
Но это окошко занимает менее 25% от всего экрана дисплея. Что так и
должно быть? Мне приходиться или напрягать зрение или подвигать лицо
поближе к экрану. Так ведь можно и зрение посадить. Моего адаптера в
списке оборудования нет. При выборе похожего происходит Out of frequence,
т.е. запредельная частота и срабатывает защита монитора. Лучше не
баловаться. Неужели менять карточку?
Если это имеет значение: карточка ATI Xpert@Play микросхема -
Mach64: RagePro
Вопрос отправлен: 01.01.2003, 05:51
Отправитель: Начинающий ламер
[Следующий вопрос >>] [Список вопросов]
Отвечает keleb-glin
Доброе время суток, Начинающий ламер!
Лично у меня всё заработало когда я в настройке монитора убрал галку с Universal Video Driver и вывернул настройки монитора по разрешению на максимум ( стоял Standart Video Driver ).
Хочу извиниться за неправильный ответ на вопрос 2312. Там я посоветовал использовать lahf и sahf, но в данном случае это невозможно, т.к. tf не входит в набор флагов, сохраняемых таким образом, поэтому способ, предложенный Vladimir'ом правилен.
Ответ отправлен: 02.01.2003, 15:53
Отправитель: keleb-glin
Отвечает Broken Sword
Здравствуйте, Начинающий ламер!
в настройках (в Video) выставь "использовать универсальный
видеодрайвер" (Universal video driver). Затем, после загрузки и активации окна SI пишешь:
lines n, где n - число строк на экране (от 25 до 128)
потом пишешь:
width n, где n - число столбцов на экране (от 80 до 160)
Т.е. максимально, насколько ты можешь его растянуть - это 128x160 (ито такое возможно ТОЛЬКО в режиме универсального видеодрайвера, при примен. специфического разрешение меньше)
Да, используй Ctrl+Alt+Стрелка для перемещения экрана отладчика в требуемом направлении.
Кстати, все команды по открытию/закрытию окон в окне отладчика (wd, ws и т.д.) также в качестве параметра могут принимать размер окна, например, wd 8 - открыть/закрыть окно данных и установить его размер в 8 строк. Т.е. размер общего окна отладчика также измениться.
Чтоб каждый раз не писать lines и width пропиши эти команды в строку инициализации (Softice initialization - General)
Ответ отправлен: 01.01.2003, 13:33
Отправитель: Broken Sword
Отвечает masquer
Здравствуйте, Начинающий ламер!
Воспользуйся советом Broken Sword-a и меньшее разрешение поставь...
Ответ отправлен: 03.01.2003, 12:33
Отправитель: masquer
Вопрос № 2310 |
Hi !
Нашел в Интернете файл с расширением fnt файл шрифтов (int 1Fh). Файл шрифтов, проблема в том, что этот файл английских шрифтов. Соответственно если я хочу написать с помощью этого файла что-нибудь, то вижу каракули вместо русских букв. Как я могу с помощью ассемблера вытащить с моего компьютера такой же файл, но с русскими шрифтами? Может у кого-нибудь есть готовая программа? Теоретически я понимаю, что вся эта графика находится на прерывании int 1Fh, но как оттуда вытащить всю графику в отдельный файл?
Просьба готовые файлы русских шрифтов не слать, так как, во-первых, мне интересен сам процесс, а во-вторых, если мне понадобится, файлы арабские кто мне поможет?
Best regards
Alex Burzak.
Приложение:
Вопрос отправлен: 01.01.2003, 13:38
Отправитель: alexneta (alexneta@aport2000.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает ASMодей
Здравствуйте, alexneta!
Очень просто: выполни функцию 35h прерывания INT 21h и в регистрах
ES:BX у тебя окажется адрес этой области памяти. Далее просто
запиши оттуда в файл 1024 байта.
Ответ отправлен: 01.01.2003, 20:00
Отправитель: ASMодей
Отвечает Sensey
Приветствую Вас, alexneta!
Дополню Asmoдея:
Только на этом прерывании фонты для CGA, а для VGA - 43h
Ответ отправлен: 02.01.2003, 12:37
Отправитель: Sensey
Отвечает Gibbel
Приветствую Вас, alexneta!
На вопрос тебе уже ответили...
Куда слать арабские шрифты???
Ответ отправлен: 04.01.2003, 10:52
Отправитель: Gibbel
Вопрос № 2311 |
Приветствую, товарищи эксперты!
Занимаюсь я значит мазахизмом, то есть пытаюсь писать проги в машинных кодах :)
Пример:
mov bx, 0 получится BB 00 00
С этим кодом все ясно, так как в интелевской доке написано,
что код инструкции - B8+ rw
А проблема вот в чем:
Объясните мне, каким образом вычисляется машинный код операндов, например
вот в такой инструкции:
xor bx, 0 получается 83 F3 00
Почему F3 ??? И ваще, что в доке по опкодам означает /число,
вроде 80 /7 ib CMP ...
Вопрос отправлен: 01.01.2003, 14:30
Отправитель: Мазахист
[Следующий вопрос >>] [Список вопросов]
Отвечает Portnov
Добрый день, Мазахист!
Специально для таких, как вы, написана статейка "Заклинание кода" в нескольких частях (от Алеф до Хей пока есть) by Aquila/HI-TECH. Выложена эта статейка на Wasm.ru, там на главной странице на самом видном месте ссылка. Очень неполохо пишет этот Аквила...
С уважением, Portnov.
Ответ отправлен: 02.01.2003, 17:17
Отправитель: Portnov
Отвечает Bob Johnson
Здравствуйте, Мазахист!
Формат команды может включать в себя поля MOD и SIB, которые определяют, какие регистры (или ячейки памяти) задействуются в этой команде. Вот F3 и есть поле MOD.
Ответ отправлен: 02.01.2003, 18:51
Отправитель: Bob Johnson
Отвечает Ayl
Здравствуйте, Мазахист!
xor bx, 0 - соответствует варианту xor r/m16, imm8. Такой команде соответствует код 83, затем идет постбайт кода операции, затем само непосредственное значение.
Постбайт кода операции записывается следующим образом:
mod 110 r/m
Здесь mod определяет режим адресации. Состоит из 2-х битов. Значение 11 соответствует режиму регистровой адресации (данные находятся в регистрах). При этом, так как поле W в первом байте кода операции (83h) равно 1 (поле W - это 0-й разряд первого байта кода операции), то используются 16-тиразрядные регистры (в предположении использования 16-тиразрядной модели). Далее, биты 3-5 постбайта представляют собой расширение кода операции и обозначают операцию xor. Поле r/m (биты 0-2 постбайта) обозначают регистр, используемый в команде. В данном случае это поле равно 011, что соответствует регистру BX.
Итак, как формируется команда:
1. xor bx, 0 соотвествует xor r/m16, imm8
2. xor r/m16, imm8 соответствует код 83, mod 110 r/m, 0
3. Регистру BX соответствует r/m = 011, режим адресации - регистровый => mod = 11
4. mod 110 r/m = 11 110 011 = 1111 0011 = F3
5. Все вместе равно - 83, F3, 00
Разбираем по кодам:
1. 83, F3, 00
2. 83 - неполная команда, требует детализации в битах 3-5 постбайта
3. Биты 3-5 постбайта равны 110, что соответствует (с учетом первого байта кода операции) команде xor r/m16, imm8
4. Режим адресации описывается значением mod в постбайте и равен 11, что означает регистровыю адресацию
5. Регистр, используемый в команде, равен BX (описывается битами 0-2 постбайта)
6. Итак, команда соответствует такой:
xor bx, imm8
7. Непосредственное значение (1 байт) равно 0. Соответственно, полностью команда записывается как xor bx, 0
Ответ отправлен: 04.01.2003, 13:38
Отправитель: Ayl
Вопрос № 2312 |
Здравствуйте эксперты.
Вопросик такой: нужно сделать так, что-бы при нажатии опред. клавиши флаг tf стал равен 1. Хочу сделать что-нить вроде такого:
pushf
pop ax
or ax,1000b
Как думаете, получиться? Может у Вас есть идеи получше?
Заранее спасибо.
И еще-если есть описания ВСЕХ флагов, плиз киньте в мыло
Вопрос отправлен: 01.01.2003, 15:30
Отправитель: Vladimir
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Доброе время суток, Vladimir!
Хм... вот ты в регистре это и сделаешь, а флаг не изменишь.
Есть же команды загрузки флагов в ah и наоборот.
Помоему
lahf
sahf
Описаний у меня нету, но мыло можно было и написать :)
Ответ отправлен: 01.01.2003, 15:50
Отправитель: Maverick
Отвечает Traish
Доброе время суток, Vladimir!
Ну и дальше push ax popf. После popf исключение отладки будет генерироваться после каждой инструкции, поэтому убедись, что у тебя есть его обработчик.
Ответ отправлен: 02.01.2003, 16:00
Отправитель: Traish
Отвечает keleb-glin
Здравствуйте, Vladimir!
А с чего ты взял, что не получится? Только лучьше делать не совсем так.
lahf ;сохраняет флаги в ah
;далее-твой код по изменению
sahf ;загрузить флаги из ah
Ответ отправлен: 01.01.2003, 17:06
Отправитель: keleb-glin
Отвечает Ayl
Доброе время суток, Vladimir!
Ну да, код примерно такой:
pushf
pop ax
or ax, 100h ; а не 1000b, как у тебя
push ax
popf
После этого начнет выполняться генерация прерывания 1 после каждой выполненной инструкции.
Кстати, с помощью lahf и sahf ничего не получится, потому что флаг TF при этих операциях не затрагивается.
Ответ отправлен: 04.01.2003, 13:48
Отправитель: Ayl
Отвечает LIFO
Добрый день, Vladimir!
Для этого можно исп. команды lahf потом инвертируешь нужный тебе бит и исполняешь sahf
Ответ отправлен: 05.01.2003, 12:15
Отправитель: LIFO
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (37) C / C++ (28) Perl (4) Delphi (21) Pascal (23) Basic / VBA (11) Java / JavaScript (7) PHP (3) MySQL / MSSQL (5) |
Пользователю Windows 95/98/Me (34) Windows NT/2000/XP (25) "Железо" (31) Поиск информации (16) |
Администратору Windows NT/2000/XP (10) Linux / Unix (15) |
Юристу Гражданское право (7) Семейное право (4) Трудовое право (4) КоАП (3) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||