В каком совместно использованная библиотека читается ()?

Как насчет того, чтобы использовать в своих интересах удар IFS- основанное разделение слова в сочетании с заменой команды (принимающий значение по умолчанию IFS)

echo $(ls /proc | grep -v "^[0-9].*")
acpi buddyinfo bus cmdline cpuinfo.....
3
23.10.2018, 04:55
3 ответа
[114246] The [114724]read()Функция [114725] реализована в общей библиотеке (libc), которая делает доступными обернутые функции в пользовательском пространстве. Это открывает "доступ" к этим функциям, которые физически находятся внутри ядра.

PS1='\[\e]0;\h \w\007\] \u$ '

В этом можно убедиться, взглянув на эту диаграмму и отметив, что существует 2 инструмента для отслеживания этих типов вызовов (system vs. shared library).

ПРИМЕЧАНИЕ:[114727] На следующей диаграмме они называются [114728]strace[114729] и [114730]ltrace[114731]. Смотрите ниже примеры функций, вызываемых этими инструментами, в соответствующих выходах этих 2 инструментов можно увидеть, какие функции вызываются исполняемым файлом, например [114732]ls[114733]. Пример

выход по трассировке:

ltrace output:

Так где же читать()?

Если вы заметили, что на выходе [114735]читать[114736] указано как функция на выходе [114737]строки [114738], а не на выходе [114739]ltrace[114740]. Это потому, что это часть интерфейса системного вызова.[114263].

4
27.01.2020, 21:10
[114228] Необработанные системные вызовы, как [114692]read(2)[114693], определены в библиотеке С (обычно glibc под Linux). Но что делает определение в библиотеке, так это собирает аргументы, настраивает их на специальный способ, которым они передаются ядру, и использует специальный механизм, чтобы попросить ядро выполнить эту работу. Он собирает результаты (включая возможные указания на ошибки) и переводит их в значение, возвращаемое вызовом.

  • В общем, если вы хотите узнать о функции [114694]foo[114695], то [114696]man foo[114697] должен ответить на ваш вопрос. В заголовке страницы руководства должно быть написано, например, [114698]foo(2)[114699] или [114700]foo(3)[114701] или что-то подобное. Номер 2 означает системный вызов, 3 означает библиотечную функцию. В редких случаях, когда показывается другой номер, попробуйте [114702]man 2 foo[114703] и [114704]man 3 foo[114705].

  • Системные вызовы определены в библиотеке C (и работа выполняется ядром); библиотечные функции определены в библиотеках, страница руководства должна указывать, какие библиотеки использовать (цитируя некоторые флаги [114706]-l[114707] для компоновки, затем это в библиотеке [114708][114709]).[114233].

  • 3
    27.01.2020, 21:10
    [114234] Системные вызовы реализованы [114710] в ядре - поэтому их называют "системными" вызовами - но механизм вызова системного вызова в ядре специфичен для платформы и может включать в себя специальные инструкции по сборке, поэтому программы обычно не делают этого напрямую.

    enter image description here

    Системная библиотека (libc) предоставляет оберточные функции для системных вызовов. Это обычные функции пользовательского пространства, которые можно вызывать, как и любые другие функции языка Си, и они выполняют необходимую магию для делегирования системного вызова [114712]real[114713] в ядре.[114237].

    2
    27.01.2020, 21:10

    Теги

    Похожие вопросы