• Эволюция системных вызовов архитектуры x86

      Про системные вызовы уже много было сказано, например здесь или здесь. Наверняка вам уже известно, что системный вызов — это способ вызова функции ядра ОС. Мне же захотелось копнуть глубже и узнать, что особенного в этом системном вызове, какие существуют реализации и какова их производительность на примере архитектуры x86-64. Если вам также интересны ответы на данные вопросы, добро пожаловать под кат.

      Читать дальше →
    • Тернистый путь Hello World

      Вдохновение на написание данной статьи было получено после прочтения похожей публикации для архитектуры x86 [1].


      Данный материал поможет тем, кто хочет понять, как устроены программы изнутри, что происходит до входа в main и для чего всё это делается. Также я покажу как можно использовать некоторые особенности библиотеки glibc. И в конце, как и в оригинальной статье [1] будет визуально представлен пройденный путь. В большинстве своём статья представляет собой разбор библиотеки glibc.


      Итак, начнём наш поход. Будем использовать Linux x86-64, а в качестве инструмента отладки — lldb. Также иногда будем дизассемблировать программу при помощи objdump.


      Исходным текстом будет обычный Hello, world (hello.cpp):


      #include <iostream>
      int main()
      {
              std::cout << "Hello, world!" << std::endl;
      }
      Читать дальше →
      • +74
      • 23,3k
      • 4