Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Процесс компиляции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему С++ хороший для gamedeva? http://www.cyberforum.ru/cpp/thread607453.html
На всех сайтах, форумах пишут, что игры нужно писать на С/С++, но почему? Нигде не видел объяснения этому, может кто здесь объяснит?
C++ std::filesystem && std::asio и пр Пытался найти хоть какие-то сроки включения всего этого в стандарт (так же ожидается lexical_cast, any, string_algo и т.д.) и вообщем везде написано разное, проскакивает инфа о 2017 годе... Как-то не... http://www.cyberforum.ru/cpp/thread607412.html
Нажатие ЛКМ в экранных координатах C++
Программа должна создавать точку в центре экрана(пусть не в центре(по указанным пикселям) эта точка должна присутствовать все время на экране,пока не будет выключена программа,при том при запущенных...
Где найти ответы к самоконтролю в книге Шилдта "С++ руководство для начинающих" C++
В книге сказано,что ответы есть на сайте осборне ком, но он перенаправляет на другой сайт,на котором ничего нет кроме продажи книг,по крайней мере мне так показалось.
C++ Автоматическое объявление объекта произвольного типа http://www.cyberforum.ru/cpp/thread603519.html
Помогите найти информацию по "Автоматическому объявлению объекта произвольного типа". Что это такое, как работает и т.д.
C++ Как реализован unordered_map? Собственно, интересна именно практическая сторона вопроса, как реализуется идеальное хеширование за O(1) в среднем ясно, об этом можно почитать в том же Кормене. Понятно, что реализации в каждом... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18029 / 6261 / 427
Регистрация: 30.03.2009
Сообщений: 17,203
Записей в блоге: 27
19.06.2012, 23:59  [ТС]
Цитата Сообщение от alexsvk Посмотреть сообщение
У main - потому что это будущая точка входа в программу?
Хочется обратить внимание на то, что понятия "переменная" или "функция" - это понятия языка программирования. В коде этих понятий как таковых нет. Линкер оперирует понятием "секция". Грубо говоря, секция кода (обычно называется ".text") - это набор байтов, куда свалены все коды функций. Это сплошной набор байтов, которые машина будет трактовать как код. И в этом наборе байтов расставлены метки, являющиеся как бы началом функции (с точки зрения человеческого восприятия). Соответственно, секция с данными - это набор байтов, описывающий все переменные с расставленными метками, отвечающими за начало переменной. Но для линкера нет никаких понятий "переменная" или "функция". Для линкера есть некоторые точки в наборе байтов, помеченные символьными метками

value - это некое подобие адреса. В исполняемом файле это действительно адрес, а вот в объектном - это смещение внутри секции (в данном случае внутри секции кода). Мой пример неудачен тем, что там только одна функция. Сделай несколько функций и увидишь, что они имеют разные value (разные смещения внутри одной секции).

Поле Ndx - это номер секции, в которой расположена метка. Список секций можно посмотреть через

Bash
$ readelf --sections t.o
Цитата Сообщение от alexsvk Посмотреть сообщение
Vis - область видимости, установлено в default, т.е. весь файл. Как интерпретируются остальные значения в таблице (блок, класс, пространство имён)?
Vis = visibility - это вот такая штука: http://gcc.gnu.org/wiki/Visibility
На данном этапе в неё углубляться не стОит

Поле Type определяет тип метки (функция, переменная, всякая прочая служебная фигня). Как правило для линкера это поле не нужно. Это некий элемент удобства. Ещё по этим полям работают дизассемблер, отладчик, возможно ещё какие-то утилиты

Поле size оно описывает размер (функции или переменной). Поле для линкера тоже не нужно. Точно так же используется дизассемблером, отладчиком, всяческими распечатывалками кода

Имя метки - ну вроде бы и так понятно. По символьным именам и происходит линковка в том месте, где нужно расставлять адреса функций и переменных

Поле Sym - это порядковый номер символьной ссылки (метки) в таблице символом текущего модуля. По этому номеру другие таблицы (типа таблицы перемещений) ссылаются на метку (символ)

Цитата Сообщение от alexsvk Посмотреть сообщение
Type, тип процессора, под который скомпилирована функция?
Type - это тип перемещения. Он описывает, в какой форме нужно в данное место прописать адрес. Бинарный файл имеет формат, не зависящий от процессора, но типы перемещений от процессора зависят (т.к. по сути дела адреса вклеиваются прямо в код), а потому в типе перемещения для удобства засвечивают имя процессора, к которому относится перемещение. Тип R_386_32 означает, что адрес будет прописан в виде абсолютного 32-битного значения. Тип R_386_PC32 означает, что адрес будет прописан в виде относительного 32-битного значения (PC = PC relative)

Цитата Сообщение от alexsvk Посмотреть сообщение
Sym. Value для printf будет установлено позже линкером для printf?
Сейчас с ходу не вспомню, что в таблице перемещений означает поле "Sym. Value". Просто у меня сейчас нету линукса под рукой
5
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru