Как понять какие аргументы подаются в функции в ассемблере?

150
08 декабря 2019, 21:30

Допустим в коде я нахожу функцию

mmap(0,321,7,34,-1,0)

Третий аргумент это аргумент prot который описывает желаемый режим защиты памяти. Здесь еще не сложно догадаться что установлены все три бита следовательно получаем число 7, но при написании функция выглядела вот так

mmap(0,321,PROT_READ | PROT_WRITE | PROT_EXEC,34,-1,0)

А вот четвертый аргумент - параметр flags, задает тип отражаемого объекта. Здесь уже сложно понять какие параметры устанавливались при написании кода. Есть ли таблица в которой указано для каждой функции какие биты устанавливают те или иные аргументы? Как исходя из чисел понять что делает функция?

Answer 1

Для этого по крайней мере достаточно открыть файл 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
READ ALSO
ошибка g++ “undefined reference to ” [дубликат]

ошибка g++ “undefined reference to ” [дубликат]

Возникает ошибка при компиляции в g++Строки из Makefile:

176
Почему вторая итерация для запроса к серверу ошибочна?

Почему вторая итерация для запроса к серверу ошибочна?

Цикл выпоняется 1 раз, я получаю html-тело страницыНа вторую итерацию сервер не отправляет мне ничего (received == 0)

127
OSG не работает с GDAL на Windows 10

OSG не работает с GDAL на Windows 10

Работаю на Windows 10 x64 IDE: QtCreator 48

162
Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

Для чего нужен static_cast, как он работает и где его применяют?

180