Наиболее частые ошибки пользователей пк

What Are System Calls?

Before we discuss how to use strace, you need to understand what we are looking for and how they work. That means we should l go over the basics of Linux System calls.

A system call is a programmatic method through which a program can request a service from the system’s Kernel. That is the process we will use to inspect the actions between user processes and the Linux kernel.

Anytime a user executes a program that makes a read, write, kill, exit, bind, etc., request, they are making a system call. There is a wide range of system calls used by programs to perform various tasks such as networking, reading and writing to files, initializing and terminating processes, and much more.

Think of system calls as functions—they behave similarly—because they can accept arguments and return values. The main difference between system calls and normal operation is that system calls can directly interact with the Kernel. System calls use a trap mechanism to navigate between user space and the Kernel.

In the Linux system, this mechanism is well hidden from the users by libraries such as Glibc.

NOTE: There is a lot more to system calls and kernel interactions than what we’ve discussed in this tutorial. Please refer to the manual pages for more information.

COLOPHON top

       This page is part of the ltrace (library call tracer) project.
       Information about the project can be found at 
       ⟨http://ltrace.org/⟩.  If you have a bug report for this manual
       page, see ⟨http://ltrace.org/⟩.  This page was obtained from the
       project's upstream Git repository
       ⟨https://github.com/dkogan/ltrace⟩ on 2021-08-27.  (At that time,
       the date of the most recent commit that was found in the
       repository was 2016-09-01.)  If you discover any rendering
       problems in this HTML version of the page, or you believe there
       is a better or more up-to-date source for the page, or you have
       corrections or improvements to the information in this COLOPHON
       (which is not part of the original manual page), send a mail to
       [email protected]

                              January 2013                     LTRACE(1)

Pages that refer to this page:
strace(1), 
ptrace(2), 
ltrace.conf(5)

Обо всём и понемножку

Знаете ли вы, …

  • … что ядро содержит в себе JIT-компилятор для байткода из userspace? Так вот, для целей фильтрации пакетов и прочей трассировки ядро поддерживает eBPF-байткод. В процессе загрузки он проверяется на безопасность, терминируемость (а значит, как я понимаю, даже теоретически не может быть Тьюринг-полным) и т. д., после чего либо JIT-ится, либо интерпретируется. Кстати, не путайте его с его предшественником, BPF.
  • … что обработчики сигналов можно запускать на отдельном стеке? Если нет, то вот описание системного вызова .
  • … что можно просто предупредить ядро о том, что некоторый файл пригодится позже:

А ещё в процессе просмотра списка системных вызовов я нашёл …

Похожие инструменты

В разных операционных системах есть другие аналогичные или связанные инструментальные средства, предлагающие аналогичные или более продвинутые функции; некоторые инструменты (хотя и используют то же или похожее имя) могут использовать совершенно разные механизмы работы, что приводит к разным наборам функций или результатам. К таким инструментам можно отнести следующее:

  • В Linux есть ltrace, который может отслеживать библиотечные и системные вызовы, xtrace, который может отслеживать программы X Window , SystemTap , perf и trace-cmd, а также KernelShark , расширяющие ftrace .
  • AIX обеспечивает ферменной команду
  • HP-UX предлагает Tusc команду
  • Solaris / Illumos имеет ферму и DTrace
  • UnixWare обеспечивает ферменной команду
  • FreeBSD предоставляет ферменной команду, KTRACE и DTrace
  • NetBSD предоставляет ktrace и DTrace
  • OpenBSD использует ktrace и kdump
  • macOS предоставляет ktrace (10.4 и более ранние версии ), DTrace (от Solaris) и связанный dtruss в 10.5 и более поздних версиях.
  • В MS Windows есть аналогичная утилита под названием StraceNT, написанная Панкаджем Гаргом, и аналогичная утилита с графическим интерфейсом под названием Process Monitor , разработанная Sysinternals .

sar

Программа является инструментальным средством мониторинга, столь же универсальным как швейцарский армейский нож. Команда , на самом деле, состоит из трех программ: , которая отображает данные, и и , которые собирают и запоминают данные. После того, как программа установлена, она создает подробный отчет об использовании процессора, памяти подкачки, о статистике сетевого ввода/вывода и пересылке данных, создании процессов и работе устройств хранения данных. Основное отличие между и в том, что первая команда лучше при долгосрочном мониторинге системы, в то время, как я считаю, лучше для того, чтобы мгновенно получить информацию о состоянии моего сервера.

Добавление меток времени

Вы можете добавить к выводу несколько разных отметок времени. Параметр -r (относительные отметки времени) добавляет отметки времени, которые показывают разницу во времени между началом каждого последующего системного вызова

Обратите внимание, что эти значения времени будут включать время, потраченное на предыдущий системный вызов, и все остальное, что программа делала до следующего системного вызова

strace -r ./stex

Метки времени отображаются в начале каждой строки вывода.

Чтобы увидеть количество времени, затраченного на каждый системный вызов, используйте параметр -T (syscall-times). Это показывает продолжительность времени, проведенного внутри каждого системного вызова.

strace -T ./stex

Продолжительность времени отображается в конце каждой строки системного вызова.

Чтобы увидеть время, в которое был вызван каждый системный вызов, используйте параметр -tt (абсолютные отметки времени). Это показывает время «настенных часов» с разрешением в микросекунды.

strace -tt ./stex

Время отображается в начале каждой строки.

Dmesg Command in Linux

21 Декабря 2019
|

Терминал

В этом руководстве мы рассмотрим основы dmesg команды.

Ядро Linux — это ядро ​​операционной системы, которое контролирует доступ к системным ресурсам, таким как процессор, устройства ввода-вывода, физическая память и файловые системы. Ядро записывает различные сообщения в кольцевой буфер ядра в процессе загрузки и во время работы системы. Эти сообщения содержат различную информацию о работе системы.

Кольцевой буфер ядра — это часть физической памяти, которая содержит сообщения журнала ядра. Он имеет фиксированный размер, что означает, что после заполнения буфера старые записи журналов перезаписываются.

Утилита командной строки используется для печати и управления кольцевого буфера ядра в Linux и других Unix-подобных операционных систем. Это полезно для изучения загрузочных сообщений ядра и устранения проблем, связанных с оборудованием.

Использование команды

Синтаксис команды следующий:

При вызове без каких-либо параметров записывает все сообщения из кольцевого буфера ядра в стандартный вывод:

По умолчанию все пользователи могут запускать команду. Однако в некоторых системах доступ к ним может быть ограничен для пользователей без полномочий root. В этой ситуации при вызове вы получите сообщение об ошибке, как показано ниже:

    Параметр ядра указывает, могут ли непривилегированные пользователи просматривать сообщения из буфера журнала ядра. Чтобы снять ограничения, установите его на ноль:

    Обычно выходные данные содержат много строк информации, так что только последняя часть выходных данных является видимой. Чтобы увидеть одну страницу за раз, перенаправьте вывод в утилиту пейджера, такую ​​как или :

Используется для сохранения цветного вывода.

    Если вы хотите фильтровать сообщения буфера, используйте . Например, чтобы просмотреть только сообщения, связанные с USB, вы должны набрать:

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

Демон отвалов сообщения ядра , так что вы можете использовать этот файл журнала:

Команда предоставляет ряд опций, которые помогут вам отформатировать и отфильтровать вывод.

Одна из наиболее часто используемых опций — это ( ), которая обеспечивает удобочитаемый вывод. Эта опция направляет вывод команды в пейджер:

    Для печати удобочитаемых временных меток используйте опцию ( ):

   Формат отметок времени также может быть установлен с помощью параметра, который может быть ctime, reltime, delta, notime или iso. Например, чтобы использовать дельта-формат, введите:

    Вы также можете объединить два или более вариантов:

    Чтобы просмотреть вывод команды в режиме реального времени, используйте параметр ( ):

Фильтрация вывода

Вы можете ограничить вывод данными объектами и уровнями.

Средство представляет процесс, который создал сообщение. поддерживает следующие возможности журнала:

  • — сообщения ядра
  • — сообщения уровня пользователя
  • — почтовая система
  • — системные демоны
  • — сообщения безопасности / авторизации
  • — внутренние сообщения syslogd
  • — подсистема линейного принтера
  • — подсистема сетевых новостей

Опция ( ) позволяет ограничить вывод определенными объектами. Опция принимает одно или несколько разделенных запятыми объектов.

Например, для отображения только сообщений ядра и системных демонов вы должны использовать:

    Каждое сообщение журнала связано с уровнем журнала, который показывает важность сообщения. поддерживает следующие уровни журнала:

  • — система неработоспособна
  • — действие должно быть предпринято немедленно
  • — критические условия
  • — условия ошибки
  • — условия предупреждения
  • — нормальное, но значимое состояние
  • — информационный
  • — сообщения уровня отладки

Опция ( ) ограничивает вывод определенными уровнями. Опция принимает один или несколько уровней, разделенных запятыми.

Следующая команда отображает только сообщения об ошибках и критические сообщения:

Очистка кольцевого буфера

Опция ( ) позволяет очистить кольцевой буфер:

    Только root или пользователи с привилегиями sudo могут очистить буфер.

Чтобы распечатать содержимое буфера перед очисткой, используйте параметр ( ):

    Если вы хотите сохранить текущие журналы в файле перед его очисткой, перенаправьте вывод в файл:

Вывод

Команда позволяет вам просматривать и контролировать кольцевой буфер ядра. Это может быть очень полезно при устранении проблем с ядром или оборудованием.

Введите в своем терминале информацию о всех доступных опциях.

Примеры

Ниже приведен пример типичного вывода команды:

user@server:~$ strace ls
...
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
fcntl64(3, F_GETFD)                     = 0x1 (flags FD_CLOEXEC)
getdents64(3, /* 18 entries */, 4096)   = 496
getdents64(3, /* 0 entries */, 4096)    = 0
close(3)                                = 0
fstat64(1, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f2c000
write(1, "autofs\nbackups\ncache\nflexlm\ngames"..., 86autofsA

Приведенный выше фрагмент — это лишь небольшая часть вывода strace при запуске по команде ‘ ls ‘. Он показывает, что текущий рабочий каталог открыт, проверяется и извлекается его содержимое. Полученный список имен файлов выводится на стандартный вывод.

PROTOTYPE LIBRARY DISCOVERY top

       When a library is mapped into the address space of a traced
       process, ltrace needs to know what the prototypes are of
       functions that this library implements.  For purposes of ltrace,
       prototype really is a bit more than just type signature: it's
       also formatting of individual parameters and of return value.
       These prototypes are stored in files called prototype libraries.

       After a library is mapped, ltrace finds out what its SONAME is.
       It then looks for a file named SONAME.conf--e.g. protolib for
       libc.so.6 would be in a file called libc.so.6.conf.  When such
       file is found (more about where ltrace looks for these files is
       below), ltrace reads all prototypes stored therein.  When a
       symbol table entry point (such as those traced by -x) is hit, the
       prototype is looked up in a prototype library corresponding to
       the library where the hit occurred.  When a library call (such as
       those traced by -e and -l) is hit, the prototype is looked up in
       all prototype libraries loaded for given process.  That is
       necessary, because a library call is traced in a PLT table of a
       caller library, but the prototype is described at callee library.

       If a library has no SONAME, basename of library file is
       considered instead.  For the main program binary, basename is
       considered as well (e.g. protolib for /bin/echo would be called
       echo.conf).  If a name corresponding to soname (e.g.
       libc.so.6.conf) is not found, and the module under consideration
       is a shared library, ltrace also tries partial matches.  Ltrace
       snips one period after another, retrying the search, until either
       a protolib is found, or X.so is all that's left.  Thus
       libc.so.conf would be considered, but libc.conf not.

       When looking for a prototype library, ltrace potentially looks
       into several directories.  On Linux, those are
       $XDG_CONFIG_HOME/ltrace, $HOME/.ltrace, X/ltrace for each X in
       $XDG_CONFIG_DIRS and /usr/share/ltrace.  If the environment
       variable XDG_CONFIG_HOME is not defined, ltrace looks into
       $HOME/.config/ltrace instead.

       There's also a mechanism for loading legacy config files.  If
       $HOME/.ltrace.conf exists it is imported to every loaded
       prototype library.  Similarly for /etc/ltrace.conf.  If both
       exist, both are imported, and $HOME/.ltrace.conf is consulted
       before /etc/ltrace.conf.

       If -F contains any directories, those are searched in precedence
       to the above system directories, in the same order in which they
       are mentioned in -F.  Any files passed in -F are imported
       similarly to above legacy config files, before them.

       See ltrace.conf(5) for details on the syntax of ltrace prototype
       library files.

FILTER SPECIFICATIONS top

       Filters are specified with the -l, -e and -x options. In short
       they mean:

       -x is ´show me what calls these symbols (including local calls)´

       -e is ´show me what calls these symbols (inter-library calls
       only)´

       -l is ´show me what calls into this library´

       Suppose I have a library defined with this header tstlib.h:

        void func_f_lib(void);
        void func_g_lib(void);

       and this implementation tstlib.c:

        #include "tstlib.h"
        void func_f_lib(void)
        {
            func_g_lib();
        }
        void func_g_lib(void)
        {
        }

       Suppose I have an executable that uses this library defined like
       this tst.c:

        #include "tstlib.h"
        void func_f_main(void)
        {
        }
        void main(void)
        {
            func_f_main();
            func_f_lib();
        }

       If linking without -Bsymbolic, the internal func_g_lib() call
       uses the PLT like external calls, and thus ltrace says:

        $ ltrace -x 'func*' -L ./tst
        func_f_main()                             = <void>
        [email protected]( <unfinished ...>
        [email protected]()                    = <void>
        <... func_f_lib resumed> )                = <void>
        +++ exited (status 163) +++

        $ ltrace -e 'func*' ./tst
        tst->func_f_lib( <unfinished ...>
        tstlib.so->func_g_lib()                   = <void>
        <... func_f_lib resumed> )                = <void>
        +++ exited (status 163) +++

        $ ltrace -l tstlib.so ./tst
        tst->func_f_lib( <unfinished ...>
        tstlib.so->func_g_lib()                   = <void>
        <... func_f_lib resumed> )                = <void>
        +++ exited (status 163) +++

       By contrast, if linking with -Bsymbolic, then the internal
       func_g_lib() call bypasses the PLT, and ltrace says:

        $ ltrace -x 'func*' -L ./tst
        func_f_main() = <void>
        [email protected]( <unfinished ...>
        [email protected]()                    = <void>
        <... func_f_lib resumed> )                = <void>
        +++ exited (status 163) +++

        $ ltrace -e 'func*' ./tst
        tst->func_f_lib()                         = <void>
        +++ exited (status 163) +++

        $ ltrace -l tstlib.so ./tst
        tst->func_f_lib()                         = <void>
        +++ exited (status 163) +++

Команда tracert.

ноября 8, 2009 P.Borvickiy

Tracert – определяет путь до точки назначения с помощью посылки в точку назначения эхо-сообщений протокола Control Message Protocol (ICMP) с постоянным увеличением значений срока жизни (Time to Live, TTL).

Выведенный путь — это список ближайших интерфейсов маршрутизаторов, находящихся на пути между узлом источника и точкой назначения. Ближний интерфейс представляют собой интерфейс маршрутизатора, который является ближайшим к узлу отправителя на пути. Запущенная без параметров, команда tracert выводит справку.

Параметры

-d

Предотвращает попытки команды tracert разрешения IP-адресов промежуточных маршрутизаторов в имена. Увеличивает скорость вывода результатов команды tracert.

-h максимальное_число_переходов

Задает максимальное количество переходов на пути при поиске конечного объекта. Значение по умолчанию равно 30.

-j список_узов

Указывает для сообщений с эхо-запросом использование параметра свободной маршрутизации в заголовке IP с набором промежуточных мест назначения, указанных в списке_узлов. При свободной маршрутизации успешные промежуточные места назначения могут быть разделены одним или несколькими маршрутизаторами. Максимальное число адресов или имен в списке — 9. Список_адресов представляет набор IP-адресов (в точечно-десятичной нотации), разделенных пробелами.

-w интервал

Определяет в миллисекундах время ожидания для получения эхо-ответов протокола ICMP или ICMP-сообщений об истечении времени, соответствующих данному сообщению эхо-запроса. Если сообщение не получено в течение заданного времени, выводится звездочка (*). Таймаут по умолчанию 4000 (4 секунды).

имя_конечного_компьютера

Задает точку назначения, указанную IP-адресом или именем узла.

-?

Отображает справку в командной строке.

Примечания

Диагностическое средство, предназначенное для определения маршрута до точки назначения с помощью посылки в точку назначения эхо-запросов протокола Internet Control Message Protocol (ICMP) с различными значениями срока жизни (TTL, Time-To-Live). Каждый маршрутизатор, через который проходит путь, обязан перед дальнейшей пересылкой пакета уменьшить значение его поля TTL по меньшей мере на 1.

Фактически, TTL — счетчик узлов. Предполагается, что когда параметр TTL становится равен 0, маршрутизатор посылает системе-источнику сообщение ICMP об истечении времени. Команда tracert определяет маршрут, посылая первый эхо-запрос с полем TTL, равным 1, и увеличивая значение этого поля на единицу для каждого последующего отправляемого эхо-пакета до тех пор, пока конечный узел не ответит или пока не будет достигнуто максимальное значение поля TTL.

Максимальное количество переходов по умолчанию равно 30 и может быть изменено с помощью параметра -h. Путь определяется из анализа сообщений ICMP об истечении времени, полученных от промежуточных маршрутизаторов, и это-ответов точки назначения. Однако некоторые маршрутизаторы не посылают сообщений об истечении времени для пакетов с нулевыми значениями TTL и не видны для команды tracert. В этом случае для перехода отображается ряд звездочек (*).

  • Чтобы выполнить трассировку маршрута, вывести значение задержки распространения по сети и потерь пакета на каждом маршрутизаторе и узле в пути, используйте команду pathping.
  • Эта команда доступна, только если в свойствах сетевого адаптера в объекте Сетевые подключения в качестве компонента установлен протокол Интернета (TCP/IP).

Примеры

Чтобы выполнить трассировку пути к узлу corp7.microsoft.com, введите команду:

tracert corp7.microsoft.com

Чтобы выполнить трассировку пути к узлу corp7.microsoft.com и предотвратить разрешение каждого IP-адреса в имя, введите:

tracert -d corp7.microsoft.com

Чтобы выполнить трассировку пути к узлу corp7.microsoft.com и использовать узлы 10.12.0.1-10.29.3.1-10.1.44.1 для свободной маршрутизации, введите следующую команду:

tracert -j 10.12.0.1 10.29.3.1 10.1.44.1 corp7.microsoft.com

Условные обозначения форматирования

Формат

Значение

Курсив Сведения, вводимые пользователем
Полужирный Элементы, вводимые без изменений
Многоточие (…) Параметр может быть введен в командной строке несколько раз
В квадратных скобках ([]) Необязательные элементы
В фигурых скобках ({}); варианты, разделенные вертикальной линией (|), пример: {even|odd} Набор вариантов, из которых необходимо выбрать один
Выходные данные программы

Раздел сайта Командная строка Теги: Командная строка

Команда strace Linux

Как я уже сказал, команда strace показывает все системные вызовы программы, которые та отправляет к системе во время выполнения, а также их параметры и результат выполнения. Но при необходимости можно подключиться и к уже запущенному процессу. Перед тем, как перейти к практике, разберём опции утилиты и её синтаксис:

$ strace опции команда аргументы

В самом простом варианте strace запускает переданную команду с её аргументами и выводит в стандартный поток ошибок все системные вызовы команды. Давайте разберём опции утилиты, с помощью которых можно управлять её поведением:

  • -i — выводить указатель на инструкцию во время выполнения системного вызова;
  • -k — выводить стек вызовов для отслеживаемого процесса после каждого системного вызова;
  • -o — выводить всю информацию о системных вызовах не в стандартный поток ошибок, а в файл;
  • -q — не выводить сообщения о подключении о отключении от процесса;
  • -qq — не выводить сообщения о завершении работы процесса;
  • -r — выводить временную метку для каждого системного вызова;
  • -s — указать максимальный размер выводимой строки, по умолчанию 32;
  • -t — выводить время суток для каждого вызова;
  • -tt — добавить микросекунды;
  • -ttt — добавить микросекунды и количество секунд после начала эпохи Unix;
  • -T — выводить длительность выполнения системного вызова;
  • -x — выводить все не ASCI-строки в шестнадцатеричном виде;
  • -xx — выводить все строки в шестнадцатеричном виде;
  • -y — выводить пути для файловых дескрипторов;
  • -yy — выводить информацию о протоколе для файловых дескрипторов;
  • -c — подсчитывать количество ошибок, вызовов и время выполнения для каждого системного вызова;
  • -O — добавить определённое количество микросекунд к счетчику времени для каждого вызова;
  • -S — сортировать информацию выводимую при опции -c. Доступны поля time, calls, name и nothing. По умолчанию используется time;
  • -w — суммировать время между началом и завершением системного вызова;
  • -e — позволяет отфильтровать только нужные системные вызовы или события;
  • -P — отслеживать только системные вызовы, которые касаются указанного пути;
  • -v — позволяет выводить дополнительную информацию, такую как версии окружения, статистику и так далее;
  • -b — если указанный системный вызов обнаружен, трассировка прекращается;
  • -f — отслеживать также дочерние процессы, если они будут созданы;
  • -ff — если задана опция -o, то для каждого дочернего процесса будет создан отдельный файл с именем имя_файла.pid.
  • -I — позволяет блокировать реакцию на нажатия Ctrl+C и Ctrl+Z;
  • -E — добавляет переменную окружения для запускаемой программы;
  • -p — указывает pid процесса, к которому следует подключиться;
  • -u — запустить программу, от имени указанного пользователя.

Вы знаете основные опции strace, но чтобы полноценно ею пользоваться, нужно ещё разобраться с системными вызовами, которые используются чаще всего. Мы не будем рассматривать все, а только основные. Многие из них вы уже и так знаете, потому что они называются так же, как и команды в терминале:

  • fork — создание нового дочернего процесса;
  • read — попытка читать из файлового дескриптора;
  • write — попытка записи в файловый дескриптор;
  • open — открыть файл для чтения или записи;
  • close — закрыть файл после чтения или записи;
  • chdir — изменить текущую директорию;
  • execve — выполнить исполняемый файл;
  • stat — получить информацию о файле;
  • mknod — создать специальный файл, например, файл устройства или сокет;

А теперь разберём примеры strace Linux.

top

Команда показывает, что происходит с вашими активными процессами. По умолчанию она отображает самые ресурсоемкие задачи, запущенные на сервере, и обновляет список каждые пять секунд. Вы можете отсортировать процессы по PID (идентификатор процесса), времени работы, можете сначала указывать новые процессы, затраты по времени, по суммарному затраченному времени, а также по используемой памяти и по общему времени использования процессора с момента запуска процесса. Я считаю, что это быстрый и простой способ увидеть, что некоторый процесс начинает выходить из-под контроля и из-за этого все движется к проблеме.

Причины возникновения общей ошибки защиты

Общая ошибка защиты чаще возникает, когда пользователь пробует бета-версию программного обеспечения. Однако даже хорошо подготовленные приложения могут вызвать общую ошибку защиты, потому что пользователь быстро нажимает на комбинацию клавиш, которую программист не мог легко предвидеть. Общая ошибка защиты также может возникать из-за неправильной настройки системы. Если пользователь неоднократно сталкивается с одним и тем же сообщением об ошибке общей защиты, ему следует записать подробности (пользователю обычно дают строку цифр, указывающих, где именно в хранилище происходит ошибка), и позвонить в компанию, производящую программное обеспечение, которое, как представляется, вызывает сообщение.

DESCRIPTION top

       ltrace is a program that simply runs the specified command until
       it exits.  It intercepts and records the dynamic library calls
       which are called by the executed process and the signals which
       are received by that process.  It can also intercept and print
       the system calls executed by the program.

       Its use is very similar to strace(1).

       ltrace shows parameters of invoked functions and system calls.
       To determine what arguments each function has, it needs external
       declaration of function prototypes.  Those are stored in files
       called prototype libraries--see ltrace.conf(5) for details on the
       syntax of these files.  See the section PROTOTYPE LIBRARY
       DISCOVERY to learn how ltrace finds prototype libraries.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: