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

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 527
от 21.04.2003, 17:50

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 3024
Отправлено ответов: 8897
Активность: 294.2 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Eugene
Статус: Профессиональный
Общий рейтинг: 108.94
URL: мощный файловый архив
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.91
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 150.36
URL: Программирование
[Подробней >>]
 
Joy
Статус: Опытный
Общий рейтинг: 124.21
[Подробней >>]
Knignick
Статус: Начальный
Общий рейтинг: 121.81
[Подробней >>]
Tigran K. Kalaidjian
Статус: Доверительный
Общий рейтинг: 113.7
[Подробней >>]
 
Portnov
Статус: Профессиональный
Общий рейтинг: 111.67
URL: Мой сайтик...
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 135.41
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 115.14
[Подробней >>]
 
K0dMaster
Статус: Доверительный
Общий рейтинг: 120.33
[Подробней >>]
Hangatyr
Статус: Доверительный
Общий рейтинг: 130.88
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 141.01
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 114.53
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 2989. Спасибо эксперту Ayl, за его ответ(2951). А вот еще: хотелось бы чтобы та же самая программа выводил... (ответов: 3)
Вопрос № 2990. Почему при попытке скомпилировать инструкцию jmp 100h компилятор фасм выдаёт такую ошибку 'invalid u... (ответов: 1)
Вопрос № 2991. Здравствуйте! Уважаемые Эксперты, у меня к вам такой вопрос: есть некая !структура! в памяти как ее ... (ответов: 3)
Вопрос № 2992. Здравствуйте Уважаемые эксперты нет ли у вас инфы по программрованию драйверов под win2000 на assemb... (ответов: 2)
Вопрос № 2993. Здравствуйте эксперты! Задача такая, из чистого ДОСа запускается программа проверки пароля, если все... (ответов: 1)
Вопрос № 2994. Ув. эксперты. Впервые столкнулся с такой проблемой: код программы у меня достаточно большой. Ошибок ... (ответов: 7)
Вопрос № 2995. Доброго времени суток, уважаемые эксперты! Вопрос по правам доступа в NT/2k. Допустим я заставил Win... (ответов: 2)
Вопрос № 2996. Доброе время суток господа! Очень захотлось выучить ассемблр, сам я сейчас учусь в колледже по спец... (ответов: 4)
Вопрос № 2997. Мне немного не ясно как осуществляется вызыв процедур из внешних модулей ,например вызыв API user32 ... (ответов: 3)

Вопросов: 9, ответов: 26


 Вопрос № 2989

Спасибо эксперту Ayl, за его ответ(2951). А вот еще: хотелось бы чтобы та же самая программа выводила свой код не в 16-ричной системе, а в двоичной!
Вопрос: Печатает, да только не свой код.. В чем ошибка? Вкладываю ее в приложение.
Первая в приложении - программы Ayla, вторая - та, что пытается двоичный код выводить.


Приложение:


Вопрос отправлен: 15.04.2003, 21:05
Отправитель: Witt

[Следующий вопрос >>] [Список вопросов]

Отвечает Eugene

Добрый день, Witt!
В общем множественные ошибки. Во 1-х при старте программы DS:SI настроено на начало программы минус 100h, поэтому надо в SI засунуть 100h. Во вторых слишком много проверок и передвижений данных внутри регистра AX. Нам же известно, что байт = 8 битам, соответственно больше или меньше нам не надо крутить цикл, а тем более проверять, дошло до прежнего числа или нет. В 3-х после ненужного xchg ah,al стояло db 0d410h. Это что секретная сигнатура? Короче выкинул. И ещё, RCL это конечно хорошая команда, но она работает через флаг CF, поэтому она здесь неуместна. Переработанный текст программы в приложении. Там правда синтаксис FASM'a, но я думаю тебе не составит труда добавить заголовок.

Приложение:

Ответ отправлен: 16.04.2003, 09:54
Отправитель: Eugene


Отвечает Ayl

Приветствую Вас, Witt!
Ну во-первых, ты используешь неправильную команду вращения: RCL "вращает через перенос", т.е. старший разряд попадает в CF, а предыдущее состояние CF помещается в младший разряд. Но CF после выполнения команды cmp cl, 9 будет равен 1 при всех выполнениях, соответственно ты получишь неправильное значение бита на одном из шагов.
Далее, после преобразования считанного байта с помощью модифицированного aam ты получаешь 2 байта, в которых значащими являются только младшие 4 разряда. А выводишь ты полностью оба байта - ошибка.
К тому же тебе вообще не нудно преобразовывать считанный байт так, как жто делается при выводе 16-ричного значения. Нужно просто пройтись по всем битам этого байта и вывести результат.
В общем, см.в Приложении код. В результате он получился даже меньше, чем вывод в 16-ричном виде (24 байта с учетом 4-х байт на дополнительный вывод пробела после каждого байта).

Приложение:

Ответ отправлен: 16.04.2003, 13:49
Отправитель: Ayl


Отвечает Bob Johnson

Добрый день, Witt!
Могу тебя чуть-чуть обрадовать (но только не в тему) - не обязательно писать db 0d410h, можно просто
aam 10h
даже тасм такое понял! а уж nasm и подавно... И еще дизассемблер hiew тоже нормально выводит, а вот td, как и следовало ожидать, тупит. По поводу программы - в приложении. У меня получилось 22 байта, меньше никак...


Приложение:

Ответ отправлен: 16.04.2003, 23:10
Отправитель: Bob Johnson


 Вопрос № 2990

Почему при попытке скомпилировать инструкцию
jmp 100h
компилятор фасм выдаёт такую ошибку
'invalid use of symbol' ?
тоесть это не обязательно 100h, а вообще jmp число....
хотя в хелпе по фасму есть точно такой пример.........
Программа виндосовская....может поэтому ? под дос всё работает...



Вопрос отправлен: 16.04.2003, 02:57
Отправитель: spaces

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Приветствую Вас, spaces!
А чем компилируешь? Tasm, например, такого не понимает из принципа. Это тупо, конечно, но ничего тут ты не сделаешь - только можешь написать вот так:
push 100h
ret
или
mov eax, 100h
jmp eax
Просто вставить код команды jmp и 100h нельзя, т.к. jmp (как впрочем и call) использует относительный адрес, т.е. относительно адреса следующей команды. Тут уже надо с $ заморачиваться. Но вообще, практически все программеры в таком случае используют push и ret (пример - патчить функции windows).


Ответ отправлен: 16.04.2003, 23:11
Отправитель: Bob Johnson


 Вопрос № 2991

Здравствуйте!
Уважаемые Эксперты, у меня к вам такой вопрос: есть некая !структура! в памяти как ее записаить/прочитать на FDD/HDD, с использованием чисто ф-й БИОСа ? (если можно то примерчик на мыло скиньте)



Вопрос отправлен: 16.04.2003, 09:46
Отправитель: GringoMan (GringoMan2002@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Eugene

Добрый день, GringoMan!
;write to media
mov ax, 0301h ;ah=03 - write sector, al - sectors count
mov cx, 1 ;ch - track, cl - sector
mov dx, 0000h ;dl - drive, 0-3 diskette, 80-81 hdd
mov bx, bufer
int 13h
jc error
Как видно из примера, используется int 13h. Для записи AH=03, а для чтения AH=02, того же прерывания.
mov ax, 0201h
mov cx, 1
mov dx, 0080h
mov bx, offset bufer
int 13h
jc error


Ответ отправлен: 16.04.2003, 10:04
Отправитель: Eugene


Отвечает Ayl

Добрый день, GringoMan!
Каких-таких функций BIOS'а? Это посекторно, что ли? Ну так дополняешь свою структуру до 512 байт и пишешь как один сектор. Или ты все-таки имел в виду файловый ввод-вывод через ОС?

Ответ отправлен: 16.04.2003, 14:26
Отправитель: Ayl


Отвечает Joy

Здравствуйте, GringoMan!
Как-то ты криво задал вопрос. Под какую операционку ты хочешь это сделать? И что значит в памяти? В какой? По какому адресу? Без этой инфы дельный примерчик тебе выслать сложновато, вся работа практически всех программ сводится к чтению/записи в/из памяти на/из FDD/HDD.

Ответ отправлен: 16.04.2003, 13:34
Отправитель: Joy


 Вопрос № 2992

Здравствуйте
Уважаемые эксперты нет ли у вас инфы по программрованию драйверов под win2000 на assemblere очень нужно написать драйвер виртуального шифрованного диска это для сдачи курсового курсового и еще один вопрос может быть и не по теме не встречали вы программы оценки знаний учащихся заточеной под web, на asp или на perl, php, python...



Вопрос отправлен: 16.04.2003, 10:03
Отправитель: vahabit (vahabit@mail.kz)

[Следующий вопрос >>] [Список вопросов]

Отвечает Knignick

Здравствуйте, vahabit!
В очень доступном виде принципы написания дров под Win2k
есть в книге Рудакова и Финогенова "ЯЗЫК АССЕМБЛЕРА: Уроки программирования". Рекомендую. На английском подробную информацию можно взять здесь:
Портал Весельчака У
Ну и разумеется DDK


Ответ отправлен: 16.04.2003, 15:16
Отправитель: Knignick


Отвечает Bob Johnson

Добрый день, vahabit!
1. Слишком круто писать драйвер дисковой системы под НТ для курсового. Тут тебе обязательно нужен DDK. Вот ссылка на DDK от ХР, где найти под 2к - не знаю: http://windriver.ssarang.net/pds/DDK_XP.ISO. Обычно в DDK есть примеры - их и смотри.
2. Я сам делал для военной кафедры тестовую web-систему, но на ... delphi + interbase, потому что у них win32, им все равно, чем пользоваться, а мне не хотелось изучать php или perl ради этого. Исходников у меня, к сожалению, не осталось, т.к. делал не дома, а у них с этим вопросом строго, поэтому если тебе нужна готовая программа, то ищи еще где-то, а если нужно помощь в создании - то пиши, отвечу.


Ответ отправлен: 16.04.2003, 23:11
Отправитель: Bob Johnson


 Вопрос № 2993

Здравствуйте эксперты!
Задача такая, из чистого ДОСа запускается программа проверки
пароля, если все Ok, то запускается Win.com (только переименованный)
(См ниже куски кода на С-- /формат out ф-ла DOS tiny/)
Вообщем другие программы запускаются на ура, а вот при запуске Win.com винды спустя секунд 5 после загрузки все летит в даун
(blue death screen :( ) - типа ошибка по такому-то адресу...
Но ведь VC/DN - это же как-то грузит?
Помогите советом или исходничком.
PS: Запускаемая ОС, как вы догадались, Win98
PPS: А делаю весь этот геморой только потому, что биос так перепрошит,
что в его настройки войти невозможно :(
PPPS: А вот в зад Win.com'а это все не присобачить - тогда вообще
глюки капитальные. (В смысле не то что внизу, а проверку пароля)


Приложение:


Вопрос отправлен: 17.04.2003, 00:03
Отправитель: AM

[Следующий вопрос >>] [Список вопросов]

Отвечает Tigran K. Kalaidjian

Приветствую Вас, AM!
В приложении - код, списанный с одного классического вируса, немного мной подправленный для данной задачи. Здесь программа «пропатчивает» win.com (лежащий с ним в одной папке) своим кодом. Для пропатчивания и, соответственно, для запуска пропатченного win.com при запуске нажмите клавишу t (проверку пароля из строчки писать поленился – в тексте помечено, где её ставить, а так пока только буква). Итак, если ввести t, то работа продолжается, если любую другую клавишу – производится выход.

Приложение:

Ответ отправлен: 18.04.2003, 23:04
Отправитель: Tigran K. Kalaidjian


 Вопрос № 2994

Ув. эксперты. Впервые столкнулся с такой проблемой:
код программы у меня достаточно большой. Ошибок НЕТ (проверял). Но при компиляции TASM выдает сообщение:
"Relative jump out of range by 002Ah bytes". При этом он ссылается на строку с командой "jmp метка" (это у меня переход на конец программы). Подскажите, пожалуйста, что это значит и как с этим бороться.



Вопрос отправлен: 17.04.2003, 02:47
Отправитель: BAPABP (krishna@unilnet.com)

[Следующий вопрос >>] [Список вопросов]

Отвечает Portnov

Здравствуйте, BAPABP!
Ставьте jmp near metka. По всей видимости, tasm пытается сделать jmp short.
С уважением, Portnov.

Ответ отправлен: 18.04.2003, 18:10
Отправитель: Portnov


Отвечает Bob Johnson

Приветствую Вас, BAPABP!
Это означает, что местоназначение условного перехода слишком далеко... Если ты пишешь jmp short, то все понятно - он может перейти только в пределах -128 .. +127, такая форма является единственной на 8086 процессоре для условных переходов. Так что попробуй во-первых поставить в программу .386 (на 386 есть условный переход без такого ограничения).


Ответ отправлен: 17.04.2003, 21:30
Отправитель: Bob Johnson


Отвечает Knignick

Привет, BAPABP!
Попробуй непосредственно указать более "дальний" вид перехода: jmp near или jmp far.


Ответ отправлен: 17.04.2003, 04:23
Отправитель: Knignick


Отвечает Maverick

Добрый день, BAPABP!
Скорее всего у тебя там не jmp, а je,jne.... Эти команды занимают 2 байта. Первый байт это сам опкод команды, а второй адрес перехода. Видишь, для адреса перехода остается всего один байт, а какое максимальное число в него влезет?
Таким образом ты можешь совершать с помощью этих команд переходы вперед или назад по коду не далее чем на 127 байт от места где стоит команда. Есть и jmp двухбайтовые, но когда ты пишешь jmp kodeend компилятор сам распознает какая эта команда (2,3,5 байт) и как правило таких ошибок не возникает.


Ответ отправлен: 17.04.2003, 05:30
Отправитель: Maverick


Отвечает ASMодей

Приветствую Вас, BAPABP!
Если у тебя команда именно JMP, то попробуй написать так:
JMP FAR PTR метка
Если у тебя команда условного перехода (JNE, JB, ...),
то поставь перед ней директиву .386 или преобразуй алгоритм
так:
вместо
JNE l1
поставь
JE l2
JMP l1
l2: ...


Ответ отправлен: 17.04.2003, 06:13
Отправитель: ASMодей


Отвечает K0dMaster

Доброе время суток, BAPABP!
Скорее всего у тебя не может выполнится jmp посколько адрес перехода ограничен (точно не помню но помойму 128 байтами) попробуй разбить переходы либо сделай это так call метка должно получится либо применяй специвикаторы переходов...


Ответ отправлен: 17.04.2003, 09:28
Отправитель: K0dMaster


Отвечает Ayl

Здравствуйте, BAPABP!
Эта ошибка возникает либо на условных переходах, когда адрес перехода расположен вне диапазона -128-+127 байт от начала следующей команды, либо при short переходах по такому же принципу. Используй либо jmp near, либо jmp far.

Ответ отправлен: 17.04.2003, 11:28
Отправитель: Ayl


 Вопрос № 2995

Доброго времени суток, уважаемые эксперты!
Вопрос по правам доступа в NT/2k. Допустим я заставил WinLogon вызвать LoadLibraryA и загрузить свою DLL-ку (как я это сделал -- пока неважно). С какими правами будет выполняться код, размещённый по entrypoint (тот код, который выполняется по загрузке DLL-ки и должен вернуть ненуль в eax, которому передаётся три параметра -- причина вызова и что-то там ещё... не помню как этот код называется, инициализации что ли?... но я думаю Вы поняли).
Спасибо всем, кто ответил.
P.S. Возможно, мне удалось найти способ натянуть WinNT/2k.



Вопрос отправлен: 17.04.2003, 09:48
Отправитель: Ingrem

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Доброе время суток, Ingrem!
1. WinNT/2k уже давно натянули. Сходи на мою страницу и скачай debploit - он именно для этого и создан. Там же есть его исходники, так что ты все сам сможешь посмотреть. Адрес: bobjohnson.nm.ru
2.
> как я это сделал -- пока неважно
> С какими правами будет выполняться код, размещённый по ...
да уж... А ты уверен, что сделал это? Тут уже был похожий вопрос, где у человека не получалось никак запустить из DllMain свое приложение (он именно говорил, что подключается к WinLogon), но из обычной DLL это прекрасно работает... В общем, если у тебя это получилось, то кто тебе мешает на DllMain повесить CreateThread, в которой сделать Sleep (10000) и CreateProcess? Тогда, по идеи через 10 секунд вся инициализация закончится и CreateProcess уж точно должен выполниться - а вот тут ты и поймешь, с какими правами он у тебя работает.
В общем, скорее всего если ты действительно подключился к WinLogon, то должен обладать его правами (SYSTEM), но ведь есть имперсонация...
Лучше опиши способ, как ты это сделал.


Ответ отправлен: 17.04.2003, 21:32
Отправитель: Bob Johnson


Отвечает Maverick

Приветствую Вас, Ingrem!
Вот ты то мне и нужен :) (вчера только твой мыл искал)
Мыльни, плиз, на Maverick@nightmail.ru
Есть разговор по Flash...думаю понял


Ответ отправлен: 17.04.2003, 13:32
Отправитель: Maverick


 Вопрос № 2996

Доброе время суток господа!
Очень захотлось выучить ассемблр, сам я сейчас учусь в колледже по спец. электроника, у нас был небольшой курс по ассемблеру но только теория. Я начал читать ваши рассылки с самого начала, и у меня возникли проблемы с практикой , что касаеться теории пока всё нормально. Я скачал все программы которые вы советовали в первой рассылке и у меня возникли сложности . Как ими пользоваться ? Что касаеться ассемблера то у меня при запуске буквально на мгновение всплыват окно Command Promt и сразу гаснет. Если возможно обьясните мне что я должен сделать что-бы запустить программу на ассемблере?
Женя.



Вопрос отправлен: 17.04.2003, 14:06
Отправитель: Женя (evgeny_na@pochtamt.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Joy

Доброе время суток, Женя!
Если ты задаешь такие вопросы, значит плохо читаешь рассылку О. Калашникова. На сайте Боба Джонсона есть полный вариант рассылки. Так вот там (в полном варианте) целая глава посвящена ассемблированию.

Ответ отправлен: 18.04.2003, 07:11
Отправитель: Joy


Отвечает Bob Johnson

Здравствуйте, Женя!
Ты запускаешь его из проводника или Windows commander'а (Total Commander?). Лучше будет поставить Far. Тогда после запуска нажмешь в far ctrl-o и увидешь, что там написано.
Чтобы откомпилировать программу под дос надо сделать так:
tasm.exe /m2 имя.asm /zi
tlink.exe /3 имя.obj /v
Тогда будет создан файл имя.exe с отладочной информацией и его будет удобно отлаживать td:
td имя.exe


Ответ отправлен: 17.04.2003, 21:32
Отправитель: Bob Johnson


Отвечает Tigran K. Kalaidjian

Приветствую Вас, Женя!
Всё дело в том, что Tasm не имеет интерфейсной оболочки (если нужна - пиши на kalaidjian@pochtamt.ru), поэтому его надо запускать из командной строки, передавая параметры компиляции. После компиляции надо запустить программу-компоновщик tlink.
Если хочется узнать по-подробнее, то советую почитать документы по пользованию (ушло мылом).

Ответ отправлен: 19.04.2003, 16:11
Отправитель: Tigran K. Kalaidjian


Отвечает Hangatyr

Здравствуйте, Женя!
Ты спрашиваешь, как запустить программу на ассемблере? Так же, как и любую другую. А вот скомпилировать немного сложнее - надо или работать из командной строки или написать bat-файл. Что до его содержимого, то оно будет различным в зависимости от того каким ассемблером пользуешься и под какую ось пишешь.
Например, Masm и Win32:
ml.exe /nologo /c /coff prog.asm
После этого будет создан файл *.obj, который надо скормить линковщику:
link.exe /nologo /subsystem:windows prog.obj
Если все прошло нормально, то можно запускать файл *.exe.
Под ДОС ключи, соответственно другие. Вообще, почитай какой-нибудь туториал - полно их в инете водится.

Ответ отправлен: 18.04.2003, 13:31
Отправитель: Hangatyr


 Вопрос № 2997

Мне немного не ясно как осуществляется вызыв процедур из внешних модулей ,например вызыв API user32 MessageBoxIndirectA прогой WinZiP 7.0 beta
015f:00426920 ffc4af4700 Call [user32 Mess.....] , softic тут все ясно.
А вот в IDA,
call dword_47afc4 <немного неясно Исходя из ассемблерного текста нет явного указания на адрес внешнего модуля.
Может это где нибудь описанно например в таблицах эксрорта импорта?
Кто знает подскажите плиз. Не судите строго я только начинаю изучение ассемблера под дос.
Вот пришлось коснутся асма под Windowc.



Вопрос отправлен: 17.04.2003, 17:41
Отправитель: Yury (ch_y@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает masquer

Приветствую Вас, Yury!
А в этой переменной и будет храниться адрес функции, просто перед этим прога ее туда запихивает.

Ответ отправлен: 17.04.2003, 18:37
Отправитель: masquer


Отвечает Dark_Lord

Приветствую Вас, Yury!
Вообще существуют две возможности вызова API, первая просто call - ом, вторая, более старая, call-ом на процедуру, которая делает jmp на API функцию!

Ответ отправлен: 20.04.2003, 10:45
Отправитель: Dark_Lord


Отвечает Hangatyr

Доброе время суток, Yury!
1. Действительно, в таблице импорта указано какие функции и из каких модулей импортировать - при загрузке такого файла загрузчик заполнит таблицу адресами указанных функций.
2. SoftIce просто нашел символьное имя функции и заменил им адрес, а в дизасме от IDA указывается адрес dword'а в jump-table, который и является адресом функции.

Ответ отправлен: 18.04.2003, 12:56
Отправитель: Hangatyr



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (39)
C / C++ (30)
Perl (8)
Delphi (14)
Pascal (23)
Basic / VBA (9)
Java / JavaScript (11)
PHP (5)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (28)
Windows NT/2000/XP (22)
"Железо" (23)
Поиск информации (11)
Администратору
Windows NT/2000/XP (12)
Linux / Unix (12)
Юристу
Гражданское право (7)
Семейное право (4)
Трудовое право (4)
КоАП (4)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное