TGViewer
Sec Note Sec Note @secnote · 2.89K subscribers
Post #67 1.78K

Forwarded from PetrSec Notes

__attribute__ в языках С и С++

Не
давно изучил интересную возможность языка С - атрибуты функций и переменных. К примеру, с помощью атрибутов можно написать код, который выполнится до и после функции main (Но который в main не вызывается явным образом 😳):

#include <stdio.h>

__attribute__ ((constructor)) void before() {
printf("%s\n", "before");
}

__attribute__ ((destructor)) void after() {
printf("%s\n", "after");
}

int main()
{
printf("%s\n", "inside main");
return 0;
}

После запуска этого кода stdout будет таким:
before
inside main
after


__attribute__ были введены в GCC начиная с версии 2.0 , выпущенной в 1992 году как часть расширений, позже вошли в стандарт. Они предоставляют разработчикам гибкость при работе с компилятором, особенно в контексте низкоуровневого программирования, оптимизации и взаимодействия с аппаратным обеспечением.

Атрибуты позволяют:

- Указывать особенности функций, например, что функция является "чистой" (pure) или "константной" (const), чтобы компилятор мог применять оптимизации.
- Контролировать выравнивание данных в памяти int x __attribute__ ((aligned (16))) = 0;
- Управлять порядком инициализации глобальных переменных.
- Запрещать вызов функций, которые нattributeваться __attribute__((deprecated))attributeлы __attribute__((weak)), которые могут быть переопределены сильными.

// Эта функция никогда не возвращает управление
void __attribute__((noreturn)) exit_function() {
while (1);
}


Начиная с C++11 атрибуты так же поддерживаются в плюсах, как часть официального стандарта, до этого при использовании атрибутов компилятор g++ вызывал gcc чтобы скомпилировать объектные файлы с атрибутами.

С момента введения атрибутов в стандарте языка C++, появился новый синтаксис, атрибуты стали записываться через [[attribute]]. Поэтому сейчас существует разница в синтаксисе:
// В стиле GCC
void __attribute__((noreturn)) terminate();

// В стиле C++
[[noreturn]] void terminate();

#cpp
More from @secnote
  1. Sep 27, 2026EDR Evasion: Process Injection Without WriteProcessMemory #EDR #maldev
  2. Sep 25, 2026سلام و درود لنگ ظهر جمعه تون بخیر فایل 4 دوره #SEC530 خدمت شما. واقعا طولانی شد 😅
  3. Sep 24, 2026Sec Note pinned a photo
  4. Sep 24, 2026My New Blog Post Evading Sysmon Dns Monitoring In 2026 | binary-win DNSevade : https://git…
  5. Sep 23, 2026Did Sysmon miss the DNS event?👀
  6. Sep 22, 2026fbi job portal defaced and compromised? oh yeah, it's a silly tuesday
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →