Системные вызовы… brk vs sbrk в частности

Тема в разделе "WASM.UNIX", создана пользователем Jin X, 9 фев 2017.

Метки:
  1. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    Изучаю программинг под Linux, в частности системные вызовы :)
    Многочасовые поиски нормального справочника по системным вызовам завершились, по сути, тремя ссылками:
    http://linuxdoc.ru/sys-doc.html
    http://www.digilife.be/quickreferences/qrc/linux system call quick reference.pdf
    http://syscalls.kernelgrok.com/
    Всё остальное - примерно то же самое, только с разным дизайном. Ну или учебник какой-нибудь о Unix в целом (хоть и на русском).
    Так вот, на практике придётся использовать все 3 справочника...
    1. В первом находить нужную функцию и читать её описание (неплохо, что там всё по-русски).
    2. Во втором находить номер функции по названию.
    3. Третий использовать, когда информации из 1-го недостаточно (там расписано подробнее и кол-во функций значительно больше... и даже исходники есть).
    У кого есть, киньте, плиз, ссылкой на удобный, полный, структурированный справочник, в котором будут указаны (важно!) номера функций и значения констант (типа EBADF и т.д.). Что дескриптор стандартного ввода = 0, а вывода = 1 я уже понял, но сдаётся мне, есть там ещё куча подобных штук, искать которые опять же придётся в example'ах на просторах всея интернета, что не очень удобно... А если там ещё и примеры использования будут, то будет вообще супер (хотя не критично).

    В частности, вот такой вопрос у меня возник: brk и sbrk вроде разные функции. А номер функции (eax) как будто один и тот же... Как это может быть? В чём подвох? Или система по значению передаваемого параметра определяет (типа > 0x8000000, значит brk, иначе sbrk)?
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Зачем гадать, все говорят что оно опенсурсно - открыл сурец да посмотрел :preved:
    В реале вероятность что вам кто то поможет овер ноль. Так же никто не знает как там что устроено на должном уровне.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    как вариант
    http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/

    + там описано как получить значения констант
    Сами функции вы можете посмотреть тупо в манах
    тут таблица
    https://github.com/torvalds/linux/blob/master/arch/x86/entry/syscalls/syscall_64.tbl

    Собственно все есть в сорцах.

    Ну если вы читали доку то там черным по белому написано, что sbrk не является системным вызовом
     
  4. Jin X

    Jin X Active Member

    Публикаций:
    0
    Регистрация:
    15 янв 2009
    Сообщения:
    369
    Адрес:
    Кольца Сатурна
    TermoSINteZ, спасибо за линк. А то у меня только x86 варианты были.

    С sbrk разобрался, сан написал её на основе brk :)
    Т.е., судя по всему, асмовских inc-ов для Linux'а не найти?
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.552
    Адрес:
    Russia
    Не видел такого в природе.
    Да и никто не пишет под линукс на асме целые проги - обычно только кусочки.
     
  6. SadKo

    SadKo Владимир Садовников

    Публикаций:
    8
    Регистрация:
    4 июн 2007
    Сообщения:
    1.610
    Адрес:
    г. Санкт-Петербург
    Jin X, можете использовать функцию syscall из libc, чтобы вызывать системный вызов.
    Как вариант, можете написать на perl парсер заголовочного файла, который генерил бы номера системных вызовов в синтаксисе асма.
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    открытые коды + песочница для их прогонки + форумы/книги для сбора базовой инфы. каких-то супер манов от А до Я едва ль получится найти.