Есть ли мотивация использования GCC __builtin_object_size на уровне исходного кода? - PullRequest
0 голосов
/ 24 октября 2019

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

Предполагаемое использование может быть, например,

#undef memcpy
#define bos0(dest) __builtin_object_size (dest, 0)
#define memcpy(dest, src, n) \
  __builtin___memcpy_chk (dest, src, n, bos0 (dest))

char *volatile p;
char buf[10];
/* It is unknown what object p points to, so this is optimized
   into plain memcpy - no checking is possible.  */
memcpy (p, "abcde", n);

... // more codes

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

1 Ответ

0 голосов
/ 25 октября 2019

Этот пример показывает, как _FORTIFY_SOURCE работает с memcpy!

Но, безусловно, могут быть другие функции, помимо стандартных библиотечных, которые могли бы принести пользуиз проверки диапазона указателя объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...