Допустим в коде я нахожу функцию
mmap(0,321,7,34,-1,0)
Третий аргумент это аргумент prot который описывает желаемый режим защиты памяти. Здесь еще не сложно догадаться что установлены все три бита следовательно получаем число 7, но при написании функция выглядела вот так
mmap(0,321,PROT_READ | PROT_WRITE | PROT_EXEC,34,-1,0)
А вот четвертый аргумент - параметр flags, задает тип отражаемого объекта. Здесь уже сложно понять какие параметры устанавливались при написании кода. Есть ли таблица в которой указано для каждой функции какие биты устанавливают те или иные аргументы? Как исходя из чисел понять что делает функция?
Для этого по крайней мере достаточно открыть файл mmap.h и посмотреть определения констант для этого четвертого параметра, который задает флаги.
Например,
/*
* Flags contain mapping type, sharing type and options.
* Mapping type; choose one
*/
#define MAP_FILE 0x0001 /* mapped from a file or device */
#define MAP_ANON 0x0002 /* allocated from memory, swap space */
#define MAP_TYPE 0x000f /* mask for type field */
/*
* Sharing types; choose one
*/
#define MAP_COPY 0x0020 /* "copy" region at mmap time */
#define MAP_SHARED 0x0010 /* share changes */
#define MAP_PRIVATE 0x0000 /* changes are private */
и т.д.
Например, значение аргумента, равного 34, этого параметра можно представить в шестнадцатиричном виде как 0x22, что соответствует выражению
MAP_COPY | MAP_ANON
Сборка персонального компьютера от Artline: умный выбор для современных пользователей