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

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


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

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

Выпуск № 683
от 05.01.2004, 14:00

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


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

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 146.9
URL: Программирование
[Подробней >>]
never_again
Статус: Опытный
Общий рейтинг: 127.51
[Подробней >>]
Artemy
Статус: Опытный
Общий рейтинг: 119.15
Телефон: 8 905 549 38 66
[Подробней >>]
 
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 110.38
[Подробней >>]
dr_dolphin
Статус: Опытный
Общий рейтинг: 114.4
[Подробней >>]
Евгений Иванов
Статус: Профессиональный
Общий рейтинг: 137.94
URL: Super Assembler Software
Телефон: Пчёлка +7 905 6601206
[Подробней >>]
 
SedHg
Статус: Доверительный
Общий рейтинг: 112.23
[Подробней >>]


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

Вопрос № 4718. Люди добрые помогите ламоте несусветной или укажите направление правильное, что мне делать. Немогу н... (ответов: 1)
Вопрос № 4719. Здраствуйте. Изучаю я ассемблер Только вот проблемка Очень сложно мне понять Что,зачем и как все ест... (ответов: 1)
Вопрос № 4720. Уважемые эксперты! Подскажите, пожалуйста, алгоритм преобразования hex числа в dec... Очень нужно! ... (ответов: 5)
Вопрос № 4721. Здравствуйте уважаемые эксперты! Столкнулся с проблемой написания патча для программы, исправляющего... (ответов: 4)
Вопрос № 4722. Добрый вечер! Дайте ,пожалуйста, у кого есть или нарисуйте ,если не сложно, исходник кода, измен... (ответов: 3)
Вопрос № 4723. всем привет! мне нужно прочитать файл(ы) с FDD, без использования прерываний DOS, RealMede.... (ответов: 1)
Вопрос № 4724. Здавствуйте эксперты, всех с Новым Годом, у меня такой вопрос. Возможно ли вызвать API функцию из DO... (ответов: 3)
Вопрос № 4725. Где можно скачать Masm 6.11? В поисковике не нашел, там ссылки все битые какие-то.... (ответов: 1)
Вопрос № 4726. Добрый день, уважаемые эксперты! Поздравляю Всех с Новым годом! Благодарен за ответ на вопрос №4708 ... (ответов: 2)
Вопрос № 4727. Как оставить программу в памяти под BIOS, т.е. когда ОС еще не загружена? Допустим, программа запи... (ответов: 1)
Вопрос № 4728. Здравствуйте эксперты. Можно ли найти документацию (rus) для Fasm 1.49, видел только 1.20. Как в Fas... (ответов: 3)

Вопросов: 11, ответов: 25


 Вопрос № 4718

Люди добрые помогите ламоте несусветной или укажите направление правильное, что мне делать. Немогу на ASM Dll-ку сделать, чтоб из неё вызывать функции программой на Visual C++6 . Link-кер ругается, нехочет видеть и всё!
Если есть доки, или готовые решения прошу мне незамедлительно выслать, за мной не заржавеет. Документации валом, а той что нужно нет.



Вопрос отправлен: 30.12.2003, 08:32
Отправитель: Sandr

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

Отвечает Bob Johnson

Приветствую Вас, Sandr!
В С++ имена могут изменяться (манглинг). Для начала попробуй динамическое связывание - т.е. ты загружаешь dll сам (LoadLibrary), получаешь адрес нужной функции (GetProcAddress) и вызываешь ее.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 31.12.2003, 15:43
Отправитель: Bob Johnson


 Вопрос № 4719

Здраствуйте.
Изучаю я ассемблер
Только вот проблемка
Очень сложно мне понять
Что,зачем и как все есть.
А конкретнее - отладчик
Не могу его понять,
Киньте ссылку -
К нашим,к русским
Где описан AFD(AFDPRO)!



Вопрос отправлен: 30.12.2003, 12:19
Отправитель: Семен

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

Отвечает never_again

Здравствуйте, Семен!
Что ж, Семён, скажу открыто -
Никудышний вы поет.
Слог не ровный, темп размытый
Да ещё и рифмы нет...
Вы просили, значит, ссылку.
про отладчик почитать...
Натянув на фейс ухмылку
Ссылку Вам иду искать.
БЫСТРО ссылку обнаружив
я вписал её в сюда
этим Вас обезоружив
доказав, что Вы - БАЛДА!!!
http://kis-kiev.narod.ru/lab/tasm/tsm1.htm
P.S. Слово "Балда" было употребленно только из интересов рифмы. Любое совпадение абсолютно случайно...

Ответ отправлен: 30.12.2003, 12:55
Отправитель: never_again


 Вопрос № 4720

Уважемые эксперты! Подскажите, пожалуйста, алгоритм преобразования hex числа в dec... Очень нужно! И еще как обратиться к младшей или старшей тетраде байта, то есть как загрузить пол-байта в другой регистр.
типа mov al,25h
...
bl=2 или чтобы bl=5
Это я сам пытаюсь дойти до алгоритма пребразования hex->dec
P.S. C НАСТУПАЮЩИМ!
Best coding, shining browsing and cool hacking/cracking forever!!!



Вопрос отправлен: 30.12.2003, 21:03
Отправитель: Dark Osmantus

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

Отвечает Artemy

Здравствуйте, Dark Osmantus!
Алгоритм преобразования HEX в DEC...
0x1234ABC = 0xC*16^0+0xB*16^1+0xA*16^2+0x4*16^3*0x3*16^4+0x2*16^5*0x1*16^6 = 12*1+11*16+10*256+4*4096+3*65536+2*1048576+1*16777216 = 12+176+2560+16384+196608+2097152+16777216 = 19090108
...надеюсь понятно.

Ответ отправлен: 31.12.2003, 10:08
Отправитель: Artemy


Отвечает Dark_Lord

Доброе время суток, Dark Osmantus!
Если FPU есть, то:
HexToDecDword proc
enter 0ch, 0
fild dword ptr [ebp+08h]
fbstp [ebp-0ch]
mov eax,[ebp-0ch]
leave
ret 4
HexToDecDword endp
Если нет, то:
_HexWordToDec@4 proc
push ebp
mov ebp,esp
push ecx
push ebx
mov eax,[ebp+08h]
and eax,0FFFFh
mov ebx,offset decs
push eax
and al,0fh
mov [ebx+4],al
pop eax
push eax
shr al,4
mov [ebx+3],al
and eax,0fh
shl eax,1
lea eax,[eax+eax*2]
add [ebx+4],ax
pop eax
push eax
and eax,0f00h
shr eax,8
push eax
shl eax,1
mov [ebx+2],al
lea eax,[eax+eax*2]
add [ebx+4],ax
pop eax
lea eax,[eax+eax*4]
add [ebx+3],al
pop eax
shr eax,12
push eax
shl eax,2
mov [ebx+1],al
shr eax,1
lea eax,[eax+eax*2]
add [ebx+4],ax
pop eax
lea eax,[eax+eax*8]
add [ebx+3],al
mov eax,0ah
first:
cmp [ebx+4],ax
jb not_1
sub [ebx+4],ax
inc byte ptr [ebx+3]
jmp short first
not_1:
cmp [ebx+3],al
jb not_2
sub [ebx+3],al
inc byte ptr [ebx+2]
jmp short not_1
not_2:
cmp [ebx+2],al
jb not_3
sub [ebx+2],al
inc byte ptr [ebx+1]
jmp short not_2
not_3:
cmp [ebx+1],al
jb not_4
sub [ebx+1],al
inc byte ptr [ebx]
jmp short not_3
not_4:
mov cl,4
mov al,[ebx]
shl eax,cl
add al,[ebx+1]
shl eax,cl
add al,[ebx+2]
shl eax,cl
add al,[ebx+3]
shl eax,cl
add al,[ebx+4]
pop ebx
pop ecx
pop ebp
ret 4
.data
Decs db 0,0,0,0, 0,0
.code
_HexWordToDec@4 endp
Удачи.
Dark_Lord(Dark_Lord@RusFAQ.ru)

Ответ отправлен: 31.12.2003, 17:50
Отправитель: Dark_Lord


Отвечает never_again

Здравствуйте, Dark Osmantus!
>> алгоритм преобразования hex числа в dec
почитай архив. эта тема много раз поднималась.
>>как загрузить пол-байта в другой регистр
да простые сдвиги ничего сложного. Смотри:
push ax ; сохраним АХ (просто АН портить неохота)
push cx ; сохраним СХ (а зачем его портить?)
mov al,25h ; 25Н положим в al
xor ah,ah ; обнулим АН
mov cl,4 ; двигать будем 4 раза
shl ax,cl ; сдвинуть АХ 4 раза влево (АН=02h AL=50h)
shr al,cl ; сдвинуть AL 4 раза вправо (AH=02h AL=05h)
mov bx,ax ; сохранить АХ в ВХ
pop cx ; восстановить СХ
pop ax ; восстановить АХ
P.S. АХ можно и не использовать, а напрямю работать с ВХ. просто я решил написать так ка у тебя в вопросе...

Ответ отправлен: 31.12.2003, 17:35
Отправитель: never_again


Отвечает dr_dolphin

Добрый день, Dark Osmantus!
1) Например: Hex=0xE7A4, тогда Dec=14*16^3+7*16^2+10*16+4*1
получаем 59300
2) Пример:
mov al,25h
mov bl,al
and bl,0f0h
shr bl,4 ;bl=2
and al,0fh
mov bh,al ;bh=5
Спасибо за поздравление . Пока ...



Ответ отправлен: 31.12.2003, 11:48
Отправитель: dr_dolphin


Отвечает Евгений Иванов

Здравствуйте, Dark Osmantus!
mov al,25h
mov bl,al
and bl,15
mov bh,al
shr bh,4
А все числа двоичные.
Тебе надо просто вывести на экран?
Тогда дели на 10 .. (см. архив)
Бывай!

* EMan: -=- Любовь существует! =-=


Ответ отправлен: 31.12.2003, 12:52
Отправитель: Евгений Иванов


 Вопрос № 4721

Здравствуйте уважаемые эксперты! Столкнулся с проблемой написания
патча для программы, исправляющего несколько байт. Такие продукты как
Process Patcher,CodeFusion использовать не хочется - хотелось бы
полностью написать его на ASM. Вопрос возможно больше по API, но
все-таки ж с ассемблером связано... Какие функции API мне необходимо
использовать? С уважением Mafia32



Вопрос отправлен: 30.12.2003, 23:15
Отправитель: Mafia32

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

Отвечает Artemy

Приветствую Вас, Mafia32!
А что ты конкретно собираешься делать?

Ответ отправлен: 31.12.2003, 10:10
Отправитель: Artemy


Отвечает dr_dolphin

Добрый день, Mafia32!
OpenFile, ReadFile, WriteFile,CloseFile для исправления файла. ReadProcessMemory, WriteProcessMemory для исправления программы в памяти...
Пока !


Ответ отправлен: 31.12.2003, 11:48
Отправитель: dr_dolphin


Отвечает Евгений Иванов

Добрый день, Mafia32!
Используй мою программу, удобно:
superforest.narod.ruesearch_shortline.htm
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 31.12.2003, 12:53
Отправитель: Евгений Иванов


Отвечает Bob Johnson

Приветствую Вас, Mafia32!
Патча в памяти или на диске? Если в памяти, то WriteProcessMemory, VirtualProtectEx. Если на диске - то просто CreateFile, WriteFile.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 31.12.2003, 15:44
Отправитель: Bob Johnson


 Вопрос № 4722

Добрый вечер!
Дайте ,пожалуйста, у кого есть или нарисуйте ,если не сложно, исходник кода, изменяющий состояние светодиодов клавиатуры. Если вдруг есть желание поделиться этим кодом то проверьте его на работоспособность. А то я не смог заставить переключиться лампочки 6ю строками своего кода во всех возможных комбинация управляущих команд этого i8042. Кстати есть ли у кого ссылка на его описание от INTEL. (НА intel.com нет).



Вопрос отправлен: 31.12.2003, 01:15
Отправитель: Alexej

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

Отвечает SedHg

Добрый день, Alexej!
Этот пример выдран из книги Зубкова.
; mig.asm
; циклически переключает светодиоды клавиатуры
.model tiny
.code
org 100h ; СОМ-программа
start proc near
mov ah,2 ; функция 02 прерывания 1Ah
int 1Ah ; получить текущее время
mov ch,dh ; сохранить текущую секунду в СН
mov cl,0100b ; CL = состояние светодиодов клавиатуры
main_loop:
call change_LEDs ; установить светодиоды в соответствии с CL
shl cl,1 ; следующий светодиод,
test cl,1000b ; если единица вышла в бит 3,
jz continue
mov cl,0001b ; вернуть ее в бит 0,
continue:
mov ah,1 ; проверить, не была ли нажата клавиша,
int 16h
jnz exit_loop ; если да - выйти из программы
push cx
mov ah,2 ; функция 02 прерывания 1Ah
int 1Ah ; получить текущее время
pop сх
cmp ch,dh ; сравнить текущую секунду в DH с СН,
mov ch,dh ; скопировать ее в любом случае,
je continue ; если это была та же самая секунда - не
; переключать светодиоды,
jmp short main_loop ; иначе - переключить светодиоды
exit_loop:
mov ah,0 ; выход из цикла - была нажата клавиша,
int 16h ; считать ее
ret ; и завершить программу
start endp
; процедура change_LEDs
; устанавливает состояние светодиодов клавиатуры в соответствии с числом в CL
change_LEDs proc near
call wait_KBin ; ожидание возможности посылки команды
mov al,0EDh
out 60h,al ; команда клавиатуры EDh
call wait_KBin ; ожидание возможности посылки команды
mov al,cl
out 60h,al ; новое состояние светодиодов
ret
change_LEDs endp
; процедура wait_KBin
; ожидание возможности ввода команды для клавиатуры
wait_KBin proc near
in al,64h ; прочитать слово состояния
test al,0010b ; бит 1 равен 1?
jnz wait_KBin ; если нет - ждать,
ret ; если да - выйти
wait_KBin endp
end start


Ответ отправлен: 01.01.2004, 14:53
Отправитель: SedHg


Отвечает dr_dolphin

Доброе время суток, Alexej!
Смотри архив рассылки... Я на этот вопрос уже отвечал где-то месяц назад... Пользуйся портами клавистуры 0x60, 0x62///
Пока !


Ответ отправлен: 31.12.2003, 11:48
Отправитель: dr_dolphin


Отвечает never_again

Здравствуйте, Alexej!
В очередной раз процитирую тов. Зубкова.
; mig.asm
; циклически переключает светодиоды клавиатуры
;
; Компиляция:
; TASM:
; tasm /m mig.asm
; tlink /t /x mig.obj
; MASM:
; ml /c mig.asm
; link mig.obj,,NUL,,,
; exe2bin mig.exe mig.com
; WASM:
; wasm mig.asm
; wlink file mig.obj form DOS COM
;

.model tiny
.code
org 100h ; COM-программа
start proc near
mov ah,2 ; функция 02 прерывания 1Ah
int 1Ah ; получить текущее время
mov ch,dh ; сохранить текущую секунду в CH
mov cl,0100b ; CL = состояние светодиодов клавиатуры
main_loop:
call change_LEDs ; установить светодиоды в соответствии с CL
shl cl,1 ; следующий светодиод,
test cl,1000b ; если единица вышла в бит 3,
jz continue
mov cl,0001b ; вернуть ее в бит 0,
continue:
mov ah,1 ; проверить, не была ли нажата клавиша,
int 16h
jnz exit_loop ; если да - выйти из программы
push cx
mov ah,2 ; функция 02 прерывания 1Ah
int 1Ah ; получить текущее время
pop cx
cmp ch,dh ; сравнить текущую секунду в DH с CH
mov ch,dh ; скопировать ее в любом случае,
je continue ; если это была та же самая секунда - не
; переключать светодиоды,
jmp short main_loop ; иначе - переключить светодиоды
exit_loop:
mov ah,0 ; выход из цикла - была нажата клавиша
int 16h ; считать ее
ret ; и завершить программу
start endp
; процедура change_LEDs
; устанавливает состояние светодиодов клавиатуры в соответствии с числом в CL
change_LEDs proc near
call wait_KBin ; ожидание возможности посылки команды
mov al,0EDh
out 60h,al ; команда клавиатуры EDh
call wait_KBin ; ожидание возможности посылки команды
mov al,cl
out 60h,al ; новое состояние светодиодов
ret
change_LEDs endp
; процедура wait_KBin
; ожидание возможности ввода команды для клавиатуры
wait_KBin proc near
in al,64h ; прочитать слово состояния
test al,0010b ; бит 1 равен 1?
jnz wait_KBin ; если нет - ждать,
ret ; если да - выйти
wait_KBin endp
end start


Ответ отправлен: 31.12.2003, 17:20
Отправитель: never_again


 Вопрос № 4723

всем привет!
мне нужно прочитать файл(ы) с FDD,
без использования прерываний DOS, RealMede.



Вопрос отправлен: 31.12.2003, 09:44
Отправитель: Zensor (ZASM@MAIL.RU)

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

Отвечает dr_dolphin

Добрый день, Zensor!
Ну воспользуйся тогда функциями BIOS Int 0x10
Пока !


Ответ отправлен: 31.12.2003, 11:49
Отправитель: dr_dolphin


 Вопрос № 4724

Здавствуйте эксперты, всех с Новым Годом, у меня такой вопрос. Возможно ли вызвать API функцию из DOS программы, если возможно, то как. Заранее спасибо.



Вопрос отправлен: 31.12.2003, 10:10
Отправитель: Виталий (ZAVitaliY@yandex.ru)

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

Отвечает Artemy

Приветствую Вас, Виталий!
Выполняй rundll.exe или rundll32.exe с соответствующими параметрами.

Ответ отправлен: 31.12.2003, 10:37
Отправитель: Artemy


Отвечает dr_dolphin

Приветствую Вас, Виталий!
Практически это неприемлимое решение...
До встречи...


Ответ отправлен: 31.12.2003, 11:49
Отправитель: dr_dolphin


Отвечает Bob Johnson

Здравствуйте, Виталий!
> Возможно ли вызвать API функцию из DOS программы
Нет.

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 31.12.2003, 15:44
Отправитель: Bob Johnson


 Вопрос № 4725

Где можно скачать Masm 6.11? В поисковике не нашел, там ссылки все битые какие-то.



Вопрос отправлен: 31.12.2003, 12:56
Отправитель: Котофей

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

Отвечает dr_dolphin

Доброе время суток, Котофей!
Попробуй ftp.exetools.com
Всего !


Ответ отправлен: 31.12.2003, 22:13
Отправитель: dr_dolphin


 Вопрос № 4726

Добрый день, уважаемые эксперты!
Поздравляю Всех с Новым годом!
Благодарен за ответ на вопрос №4708 Евгению Иванову и Bob Johnson.
Прошу ответить на следующий вопрос:
Как преобразовать число в строку и обратно?
Заранее благодарен.



Вопрос отправлен: 31.12.2003, 13:29
Отправитель: Valentin (neofit@swn.boyarka.kiev.ua)

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

Отвечает Евгений Иванов

Приветствую Вас, Valentin!
wsprintf
Поищи исходники HLA, там много чего полезного.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 01.01.2004, 19:46
Отправитель: Евгений Иванов


Отвечает Bob Johnson

Доброе время суток, Valentin!
Число в строку - wwsprintf:
call wsprintf, offset buffer, offset format, [number]
...
buffer db 128 dup ?
format db '%i', 0
number dd ...
Обратно - нужно написать свою функцию. Примеры неоднократно здесь были.
> Поздравляю Всех с Новым годом!
Присоединяюсь!

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 31.12.2003, 15:44
Отправитель: Bob Johnson


 Вопрос № 4727

Как оставить программу в памяти под BIOS, т.е. когда ОС еще не загружена?
Допустим, программа записана по всем правилам на отдельный ПЗУ. BIOS его обнаруживает и передает ей управление. Как сделать так, чтобы программа осталась в памяти и при этом не конфликтовала с ОС?
З. Ы. Посоветуйте материалы по теме?



Вопрос отправлен: 01.01.2004, 13:29
Отправитель: NeuroMancer

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

Отвечает Евгений Иванов

Добрый день, NeuroMancer!
Делай всё по правилам ПЗУ и она останется в памяти.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 01.01.2004, 19:47
Отправитель: Евгений Иванов


 Вопрос № 4728

Здравствуйте эксперты.
Можно ли найти документацию (rus) для Fasm 1.49, видел только 1.20.
Как в Fasm выполнить выражение типа mov адрес, адрес (mov [$+1], [$])



Вопрос отправлен: 01.01.2004, 13:56
Отправитель: Pawel (ProgramMan@list.ru)

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

Отвечает Евгений Иванов

Здравствуйте, Pawel!
Нет такой команды.
Применяй стек или промежуточные регистры.
* EMan: -=- Любовь существует! =-=


Ответ отправлен: 01.01.2004, 19:48
Отправитель: Евгений Иванов


Отвечает never_again

Добрый день, Pawel!
>>Как в Fasm выполнить выражение типа mov адрес, адрес
>>(mov [$+1], [$])
я вообще-то с Fasm не работал, но ты пытаешься сделать illigal memory reference и ассемблер, будь то MASM, TASM или FASM, пойти против этого не может...


Ответ отправлен: 01.01.2004, 14:22
Отправитель: never_again


Отвечает Bob Johnson

Приветствую Вас, Pawel!
> mov [$+1], [$]
Невозможно одной командой передать содержимое одной ячейки памяти в другую. Делай так:
mov eax, [...]
mov [...], eax

* EMan1.5: ---===*** The game we play ***===---


Ответ отправлен: 02.01.2004, 01:50
Отправитель: Bob Johnson



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
Assembler (25)
C / C++ (18)
Perl (4)
Builder / Delphi (21)
Pascal (22)
Basic / VBA (3)
Java / JavaScript (5)
PHP (11)
Криптография (7)
WinAPI (13)
Пользователю
Windows 95/98/Me (42)
Windows NT/2000/XP (55)
"Железо" (28)
Поиск информации (19)
Администратору
Windows NT/2000/XP (29)
Linux / Unix (14)
Юристу
Гражданское право (15)
Семейное право (9)
Трудовое право (10)
КоАП (9)

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное