Backtrack

Все о Backtrack
Текущее время: 26-10, 22:13

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Осмотрим GCC
СообщениеДобавлено: 31-12, 00:27 
Не в сети
Site Admin

Зарегистрирован: 16-04, 14:49
Сообщения: 29
$ gcc --target-help

Ассемблер в Linux

Следует сказать несколько слов и об ассемблере. Язык ассемблера практически никогда не требуется прикладному программисту. Но разработчику модулей в отдельных случаях он может помочь, часто даже не столько для написания конечного кода, сколько для понимания того, с чем приходится иметь дело (в коде ядра Linux достаточно много ассемблерных инлайновых вставок) в ходе экспериментов и отладки, а также при поиске ошибок. В сложных случаях иногда бывает полезно изучить ассемблерный код, генерируемый компилятором GCC в качестве промежуточного этапа компиляции и убедиться, что … компилятор вас неправильно понял. В конечном счёте, вопрос о том, нужно ли разработчику знание ассемблера должен пониматься так: разработчик модулей не обязан уметь писать код на языке ассемблера, но он должен понимать написанное на ассемблере и уметь различать подобный код. Можно было проигнорировать ассемблерные возможности gcc, но так как некоторые из представленных примеров используют такой код, то всё же следует сделать короткий экскурс в язык ассемблера.

Прежде всего, можно просмотреть ассемблерный код, сгенерированный GCC из исходного кода на языке C, если при запуске компилятора добавить к нему ключ –S.

$ gcc -S -o my_file.S my_file.c

Иногда интересно узнать, как компилятор разложил в стек параметры, передаваемые функции при вызове, или возвращаемое значение в тех случаях, когда возвращается структурированный результат.

В проекте GCC предполагается возможность использовать ассемблерный код для всех типов процессорных архитектур (x86, PPC, MIPS, AVR, ARM, ...), которые он поддерживает. При этом общий синтаксис записи в нотации AT&T (о котором будет подробно рассказано ниже) будет соблюдаться, но в деталях синтаксис будет отличаться от платформы к платформе, главным образом, за счёт различной конфигурации регистров процессора и их разного обозначения, а также различий в допустимых способах адресации для разных процессоров. Для генерации машинного кода компилятор gcc, в конечной фазе вызывает программу ассемблерного кодогенератора as, сконфигурированную под целевой процессор:

$ as --version
GNU assembler 2.17.50.0.6-6.el5 20061020
...
This assembler was configured for a target of `i386-redhat-linux'.

Присутствует заблуждение, что если в проекте GCC декларируется обширный перечень поддерживаемых процессорных архитектур, то из этого автоматически следует, что присутствующий в стандартной Linux-системе компилятор в состоянии выполнить компиляцию для всех этих платформ, например, в порядке кросс-компиляции. К сожалению, это не так, ведь потенциальное не означает реальное. Но всегда есть возможность найти и установить тот экземпляр (сборку) компилятора gcc, который осуществляет компиляцию для выбранной архитектуры. Другой способ получить такой компилятор – это, как и для большинства программных проектов GNU, собрать его самостоятельно из общедоступных исходных кодов проекта GCC.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Generate 64bit x86-64 code
СообщениеДобавлено: 31-12, 00:33 
Не в сети
Site Admin

Зарегистрирован: 16-04, 14:49
Сообщения: 29
The following options are target specific:
-m128bit-long-double sizeof(long double) is 16
-m16 Generate 16bit i386 code
-m32 Generate 32bit i386 code
-m3dnow Support 3DNow! built-in functions
-m64 Generate 64bit x86-64 code
-m80387 Use hardware fp
-m8bit-idiv Expand 32bit/64bit integer divide into 8bit
unsigned integer divide with run-time check
-m96bit-long-double sizeof(long double) is 12
-mabi= Generate code that conforms to the given ABI
-mabm Support code generation of Advanced Bit
Manipulation (ABM) instructions.
-maccumulate-outgoing-args Reserve space for outgoing arguments in the
function prologue
-maddress-mode= Use given address mode
-madx Support flag-preserving add-carry instructions
-maes Support AES built-in functions and code generation
-malign-data= Use the given data alignment
-malign-double Align some doubles on dword boundary
-malign-functions= Function starts are aligned to this power of 2
-malign-jumps= Jump targets are aligned to this power of 2
-malign-loops= Loop code aligned to this power of 2
-malign-stringops Align destination of the string operations
-mandroid Generate code for the Android platform.
-march= Generate code for given CPU
-masm= Use given assembler dialect
-mavx Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2 and AVX built-in functions and code
generation
-mavx2 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX and AVX2 built-in functions and code
generation
-mavx256-split-unaligned-load Split 32-byte AVX unaligned load
-mavx256-split-unaligned-store Split 32-byte AVX unaligned store
-mavx512bw Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512BW built-
in functions and code generation
-mavx512cd Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512CD built-
in functions and code generation
-mavx512dq Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512DQ built-
in functions and code generation
-mavx512er Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512ER built-
in functions and code generation
-mavx512f Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F built-in functions
and code generation
-mavx512ifma Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512IFMA
built-in functions and code generation
-mavx512pf Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512PF built-
in functions and code generation
-mavx512vbmi Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512VBMI
built-in functions and code generation
-mavx512vl Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX, AVX2 and AVX512F and AVX512VL built-
in functions and code generation
-mbionic Use Bionic C library
-mbmi Support BMI built-in functions and code generation
-mbmi2 Support BMI2 built-in functions and code
generation
-mbranch-cost= Branches are this expensive (1-5, arbitrary units)
-mcld Generate cld instruction in the function prologue.
-mclflushopt Support CLFLUSHOPT instructions
-mclwb Support CLWB instruction
-mcmodel= Use given x86-64 code model
-mcrc32 Support code generation of crc32 instruction.
-mcx16 Support code generation of cmpxchg16b instruction.
-mdispatch-scheduler Do dispatch scheduling if processor is bdver1 or
bdver2 or bdver3 or bdver4 and Haifa scheduling
is selected.
-mf16c Support F16C built-in functions and code
generation
-mfancy-math-387 Generate sin, cos, sqrt for FPU
-mfentry Emit profiling counter call at function entry
before prologue.
-mfma Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
SSE4.2, AVX and FMA built-in functions and code
generation
-mfma4 Support FMA4 built-in functions and code
generation
-mforce-drap Always use Dynamic Realigned Argument Pointer
(DRAP) to realign stack
-mfp-ret-in-387 Return values of functions in FPU registers
-mfpmath= Generate floating point mathematics using given
instruction set
-mfsgsbase Support FSGSBASE built-in functions and code
generation
-mfxsr Support FXSAVE and FXRSTOR instructions
-mglibc Use GNU C library
-mhard-float Use hardware fp
-mhle Support Hardware Lock Elision prefixes
-mieee-fp Use IEEE math for fp comparisons
-mincoming-stack-boundary= Assume incoming stack aligned to this power of 2
-minline-all-stringops Inline all known string operations
-minline-stringops-dynamically Inline memset/memcpy string operations, but
perform inline version only for small blocks
-mlarge-data-threshold= Data greater than given threshold will go into
.ldata section in x86-64 medium model
-mlong-double-128 Use 128-bit long double
-mlong-double-64 Use 64-bit long double
-mlong-double-80 Use 80-bit long double
-mlwp Support LWP built-in functions and code
generation
-mlzcnt Support LZCNT built-in function and code
generation
-mmemcpy-strategy= Specify memcpy expansion strategy when expected
size is known
-mmemset-strategy= Specify memset expansion strategy when expected
size is known
-mmmx Support MMX built-in functions
-mmovbe Support code generation of movbe instruction.
-mmpx Support MPX code generation
-mms-bitfields Use native (MS) bitfield layout
-mmwaitx Support MWAITX and MONITORX built-in functions
and code generation
-mno-default Clear all tune features
-mno-sse4 Do not support SSE4.1 and SSE4.2 built-in
functions and code generation
-mnop-mcount Generate mcount/__fentry__ calls as nops. To
activate they need to be patched in.
-momit-leaf-frame-pointer Omit the frame pointer in leaf functions
-mpc32 Set 80387 floating-point precision to 32-bit
-mpc64 Set 80387 floating-point precision to 64-bit
-mpc80 Set 80387 floating-point precision to 80-bit
-mpclmul Support PCLMUL built-in functions and code
generation
-mpcommit Support PCOMMIT instruction
-mpopcnt Support code generation of popcnt instruction.
-mprefer-avx128 Use 128-bit AVX instructions instead of 256-bit
AVX instructions in the auto-vectorizer.
-mpreferred-stack-boundary= Attempt to keep stack aligned to this power of 2
-mprefetchwt1 Support PREFETCHWT1 built-in functions and code
generation
-mprfchw Support PREFETCHW instruction
-mpush-args Use push instructions to save outgoing arguments
-mrdrnd Support RDRND built-in functions and code
generation
-mrdseed Support RDSEED instruction
-mrecip Generate reciprocals instead of divss and sqrtss.
-mrecip= Control generation of reciprocal estimates.
-mrecord-mcount Generate __mcount_loc section with all mcount or
__fentry__ calls.
-mred-zone Use red-zone in the x86-64 code
-mregparm= Number of registers used to pass integer arguments
-mrtd Alternate calling convention
-mrtm Support RTM built-in functions and code generation
-msahf Support code generation of sahf instruction in
64bit x86-64 code.
-msha Support SHA1 and SHA256 built-in functions and
code generation
-mskip-rax-setup Skip setting up RAX register when passing
variable arguments.
-msoft-float Do not use hardware fp
-msse Support MMX and SSE built-in functions and code
generation
-msse2 Support MMX, SSE and SSE2 built-in functions and
code generation
-msse2avx Encode SSE instructions with VEX prefix
-msse3 Support MMX, SSE, SSE2 and SSE3 built-in
functions and code generation
-msse4 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and
SSE4.2 built-in functions and code generation
-msse4.1 Support MMX, SSE, SSE2, SSE3, SSSE3 and SSE4.1
built-in functions and code generation
-msse4.2 Support MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 and
SSE4.2 built-in functions and code generation
-msse4a Support MMX, SSE, SSE2, SSE3 and SSE4A built-in
functions and code generation
-msseregparm Use SSE register passing conventions for SF and
DF mode
-mssse3 Support MMX, SSE, SSE2, SSE3 and SSSE3 built-in
functions and code generation
-mstack-arg-probe Enable stack probing
-mstack-protector-guard= Use given stack-protector guard
-mstackrealign Realign stack in prologue
-mstringop-strategy= Chose strategy to generate stringop using
-mtbm Support TBM built-in functions and code generation
-mtls-dialect= Use given thread-local storage dialect
-mtls-direct-seg-refs Use direct references against %gs when accessing
tls data
-mtune-ctrl= Fine grain control of tune features
-mtune= Schedule code for given CPU
-muclibc Use uClibc C library
-mveclibabi= Vector library ABI to use
-mvect8-ret-in-mem Return 8-byte vectors in memory
-mvzeroupper Generate vzeroupper instruction before a transfer
of control flow out of the function.
-mx32 Generate 32bit x86-64 code
-mxop Support XOP built-in functions and code
generation
-mxsave Support XSAVE and XRSTOR instructions
-mxsavec Support XSAVEC instructions
-mxsaveopt Support XSAVEOPT instruction
-mxsaves Support XSAVES and XRSTORS instructions

Known assembler dialects (for use with the -masm-dialect= option):
att intel

Known ABIs (for use with the -mabi= option):
ms sysv

Known code models (for use with the -mcmodel= option):
32 kernel large medium small

Valid arguments to -mfpmath=:
387 387+sse 387,sse both sse sse+387 sse,387

Known data alignment choices (for use with the -malign-data= option):
abi cacheline compat

Known vectorization library ABIs (for use with the -mveclibabi= option):
acml svml

Known address mode (for use with the -maddress-mode= option):
long short

Known stack protector guard (for use with the -mstack-protector-guard= option):
global tls

Valid arguments to -mstringop-strategy=:
byte_loop libcall loop rep_4byte rep_8byte rep_byte unrolled_loop
vector_loop

Known TLS dialects (for use with the -mtls-dialect= option):
gnu gnu2

Assembler options
=================

Use "-Wa,OPTION" to pass "OPTION" to the assembler.

-Q ignored
-V print assembler version number
-k ignored
-n Do not optimize code alignment
-q quieten some warnings
-s ignored
--32/--64/--x32 generate 32bit/64bit/x32 code
--divide ignored
-march=CPU[,+EXTENSION...]
generate code for CPU and EXTENSION, CPU is one of:
generic32, generic64, i386, i486, i586, i686,
pentium, pentiumpro, pentiumii, pentiumiii, pentium4,
prescott, nocona, core, core2, corei7, l1om, k1om,
iamcu, k6, k6_2, athlon, opteron, k8, amdfam10,
bdver1, bdver2, bdver3, bdver4, znver1, btver1,
btver2
EXTENSION is combination of:
8087, 287, 387, no87, mmx, nommx, sse, sse2, sse3,
ssse3, sse4.1, sse4.2, sse4, nosse, avx, avx2,
avx512f, avx512cd, avx512er, avx512pf, avx512dq,
avx512bw, avx512vl, noavx, vmx, vmfunc, smx, xsave,
xsaveopt, xsavec, xsaves, aes, pclmul, fsgsbase,
rdrnd, f16c, bmi2, fma, fma4, xop, lwp, movbe, cx16,
ept, lzcnt, hle, rtm, invpcid, clflush, nop, syscall,
rdtscp, 3dnow, 3dnowa, padlock, svme, sse4a, abm,
bmi, tbm, adx, rdseed, prfchw, smap, mpx, sha,
clflushopt, prefetchwt1, se1, clwb, pcommit,
avx512ifma, avx512vbmi, clzero, mwaitx, ospke
-mtune=CPU optimize for CPU, CPU is one of:
generic32, generic64, i8086, i186, i286, i386, i486,
i586, i686, pentium, pentiumpro, pentiumii,
pentiumiii, pentium4, prescott, nocona, core, core2,
corei7, l1om, k1om, iamcu, k6, k6_2, athlon, opteron,
k8, amdfam10, bdver1, bdver2, bdver3, bdver4, znver1,
btver1, btver2
-msse2avx encode SSE instructions with VEX prefix
-msse-check=[none|error|warning]
check SSE instructions
-moperand-check=[none|error|warning]
check operand combinations for validity
-mavxscalar=[128|256] encode scalar AVX instructions with specific vector
length
-mevexlig=[128|256|512] encode scalar EVEX instructions with specific vector
length
-mevexwig=[0|1] encode EVEX instructions with specific EVEX.W value
for EVEX.W bit ignored instructions
-mevexrcig=[rne|rd|ru|rz]
encode EVEX instructions with specific EVEX.RC value
for SAE-only ignored instructions
-mmnemonic=[att|intel] use AT&T/Intel mnemonic
-msyntax=[att|intel] use AT&T/Intel syntax
-mindex-reg support pseudo index registers
-mnaked-reg don't require `%' prefix for registers
-mold-gcc support old (<= 2.8.1) versions of gcc
-madd-bnd-prefix add BND prefix for all valid branches
-mshared disable branch optimization for shared code
-momit-lock-prefix=[no|yes]
strip all lock prefixes
-mrelax-relocations=[no|yes]
generate relax relocations
-mamd64 accept only AMD64 ISA
-mintel64 accept only Intel64 ISA

Linker options
==============

Use "-Wl,OPTION" to pass "OPTION" to the linker.

elf_i386:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
elf_iamcu:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
elf32_x86_64:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
elf_x86_64:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
-z bndplt Always generate BND prefix in PLT entries
elf_l1om:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
elf_k1om:
-z noextern-protected-data Do not treat protected data symbol as external
-z call-nop=PADDING Use PADDING as 1-byte NOP for branch
i386pep:
--base_file <basefile> Generate a base file for relocatable DLLs
--dll Set image base to the default for DLLs
--file-alignment <size> Set file alignment
--heap <size> Set initial size of the heap
--image-base <address> Set start address of the executable
--major-image-version <number> Set version number of the executable
--major-os-version <number> Set minimum required OS version
--major-subsystem-version <number> Set minimum required OS subsystem version
--minor-image-version <number> Set revision number of the executable
--minor-os-version <number> Set minimum required OS revision
--minor-subsystem-version <number> Set minimum required OS subsystem revision
--section-alignment <size> Set section alignment
--stack <size> Set size of the initial stack
--subsystem <name>[:<version>] Set required OS subsystem [& version]
--support-old-code Support interworking with old code
--[no-]leading-underscore Set explicit symbol underscore prefix mode
--[no-]insert-timestamp Use a real timestamp rather than zero. (default)
This makes binaries non-deterministic
--add-stdcall-alias Export symbols with and without @nn
--disable-stdcall-fixup Don't link _sym to _sym@nn
--enable-stdcall-fixup Link _sym to _sym@nn without warnings
--exclude-symbols sym,sym,... Exclude symbols from automatic export
--exclude-all-symbols Exclude all symbols from automatic export
--exclude-libs lib,lib,... Exclude libraries from automatic export
--exclude-modules-for-implib mod,mod,...
Exclude objects, archive members from auto
export, place into import library instead.
--export-all-symbols Automatically export all globals to DLL
--kill-at Remove @nn from exported symbols
--out-implib <file> Generate import library
--output-def <file> Generate a .DEF file for the built DLL
--warn-duplicate-exports Warn about duplicate exports.
--compat-implib Create backward compatible import libs;
create __imp_<SYMBOL> as well.
--enable-auto-image-base Automatically choose image base for DLLs
unless user specifies one
--disable-auto-image-base Do not auto-choose image base. (default)
--dll-search-prefix=<string> When linking dynamically to a dll without
an importlib, use <string><basename>.dll
in preference to lib<basename>.dll
--enable-auto-import Do sophisticated linking of _sym to
__imp_sym for DATA references
--disable-auto-import Do not auto-import DATA items from DLLs
--enable-runtime-pseudo-reloc Work around auto-import limitations by
adding pseudo-relocations resolved at
runtime.
--disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for
auto-imported DATA.
--enable-extra-pep-debug Enable verbose debug output when building
or linking to DLLs (esp. auto-import)
--enable-long-section-names Use long COFF section names even in
executable image files
--disable-long-section-names Never use long COFF section names, even
in object files
--high-entropy-va Image is compatible with 64-bit address space
layout randomization (ASLR)
--dynamicbase Image base address may be relocated using
address space layout randomization (ASLR)
--forceinteg Code integrity checks are enforced
--nxcompat Image is compatible with data execution prevention
--no-isolation Image understands isolation but do not isolate the image
--no-seh Image does not use SEH. No SE handler may
be called in this image
--no-bind Do not bind this image
--wdmdriver Driver uses the WDM model
--tsaware Image is Terminal Server aware
--build-id[=STYLE] Generate build ID
i386pe:
--base_file <basefile> Generate a base file for relocatable DLLs
--dll Set image base to the default for DLLs
--file-alignment <size> Set file alignment
--heap <size> Set initial size of the heap
--image-base <address> Set start address of the executable
--major-image-version <number> Set version number of the executable
--major-os-version <number> Set minimum required OS version
--major-subsystem-version <number> Set minimum required OS subsystem version
--minor-image-version <number> Set revision number of the executable
--minor-os-version <number> Set minimum required OS revision
--minor-subsystem-version <number> Set minimum required OS subsystem revision
--section-alignment <size> Set section alignment
--stack <size> Set size of the initial stack
--subsystem <name>[:<version>] Set required OS subsystem [& version]
--support-old-code Support interworking with old code
--[no-]leading-underscore Set explicit symbol underscore prefix mode
--thumb-entry=<symbol> Set the entry point to be Thumb <symbol>
--[no-]insert-timestamp Use a real timestamp rather than zero (default).
This makes binaries non-deterministic
--add-stdcall-alias Export symbols with and without @nn
--disable-stdcall-fixup Don't link _sym to _sym@nn
--enable-stdcall-fixup Link _sym to _sym@nn without warnings
--exclude-symbols sym,sym,... Exclude symbols from automatic export
--exclude-all-symbols Exclude all symbols from automatic export
--exclude-libs lib,lib,... Exclude libraries from automatic export
--exclude-modules-for-implib mod,mod,...
Exclude objects, archive members from auto
export, place into import library instead.
--export-all-symbols Automatically export all globals to DLL
--kill-at Remove @nn from exported symbols
--out-implib <file> Generate import library
--output-def <file> Generate a .DEF file for the built DLL
--warn-duplicate-exports Warn about duplicate exports
--compat-implib Create backward compatible import libs;
create __imp_<SYMBOL> as well.
--enable-auto-image-base[=<address>] Automatically choose image base for DLLs
(optionally starting with address) unless
specifically set with --image-base
--disable-auto-image-base Do not auto-choose image base. (default)
--dll-search-prefix=<string> When linking dynamically to a dll without
an importlib, use <string><basename>.dll
in preference to lib<basename>.dll
--enable-auto-import Do sophisticated linking of _sym to
__imp_sym for DATA references
--disable-auto-import Do not auto-import DATA items from DLLs
--enable-runtime-pseudo-reloc Work around auto-import limitations by
adding pseudo-relocations resolved at
runtime.
--disable-runtime-pseudo-reloc Do not add runtime pseudo-relocations for
auto-imported DATA.
--enable-extra-pe-debug Enable verbose debug output when building
or linking to DLLs (esp. auto-import)
--large-address-aware Executable supports virtual addresses
greater than 2 gigabytes
--disable-large-address-aware Executable does not support virtual
addresses greater than 2 gigabytes
--enable-long-section-names Use long COFF section names even in
executable image files
--disable-long-section-names Never use long COFF section names, even
in object files
--dynamicbase Image base address may be relocated using
address space layout randomization (ASLR)
--forceinteg Code integrity checks are enforced
--nxcompat Image is compatible with data execution prevention
--no-isolation Image understands isolation but do not isolate the image
--no-seh Image does not use SEH. No SE handler may
be called in this image
--no-bind Do not bind this image
--wdmdriver Driver uses the WDM model
--tsaware Image is Terminal Server aware
--build-id[=STYLE] Generate build ID
m


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by Forumenko © 2006–2014
Русская поддержка phpBB