Правда ли, что двоичные файлы, такие как исполняемые файлы, состоят из символов, и символ отладки является одним из них?
Как понять символ?
Правда ли, что двоичные файлы, такие как исполняемые файлы, состоят из символов, и символ отладки является одним из них?
Как понять символ?
Далее следует объяснение очень высокого уровня:
Во-первых, символы существуют не только в мире С++. Они существуют в двоичных файлах нескольких языков высокого уровня, таких как C, C++ и т. д., при сборке с некоторыми указанными настройками. Возьмем определение
'целое я = 2;'
В двоичном коде «i» — это просто ячейка памяти (например, 0x10203040), которая инициализируется 2. Ячейки памяти с именем «i» нет. Имя «i» назначается этой ячейке памяти на основании символов отладки, которые загружаются с двоичными файлами (при сборке с определенными флагами), которые поддерживают сопоставление «местоположения памяти» с «именами исходного уровня».
Например, в формате файла PE предусмотрен каталог отладки, в котором хранится информация об отладочных символах. . Они очень полезны при отладке, потому что в отсутствие таких отладочных символов отладка только с точки зрения нулей и единиц binray была бы действительно очень сложной задачей. Таким образом, когда вы отлаживаете такой двоичный файл (который имеет приведенное выше определение «i»), который был создан с флагами отладки, отладчик знает, что ячейка памяти «0x10203040» соответствует «i» благодаря каталогу отладки в PE. файл.
Эм, нет. Исполняемые файлы содержат машинный код. И значения инициализации для глобальных переменных. В Windows отладочная информация обычно хранится в отдельном файле .pdb. Часть отладочных данных из этого файла о функции или переменной в вашей программе называется символом.
API dbghelp описан здесь.