дизассемблированный код в visual studio
Дизассемблированный код в visual studio
Просмотр кода дизассемблирования в отладчике Visual Studio (C#, C++, Visual Basic, F#)
В окне Дизассемблированный код отображается код сборки, соответствующий инструкциям, созданным компилятором. При отладке управляемого кода эти инструкции ассемблера соответствуют присущему данному объекту коду, созданному компилятором JIT, а не промежуточному языку (MSIL), созданному компилятором Visual Studio.
[!NOTE] Чтобы воспользоваться всеми возможностями окна Дизассемблированный код, изучите основы программирования на языке ассемблера.
Эта возможность доступна, только если включена отладка на уровне адреса. Она недоступна для отладки скриптов и SQL.
В дополнение к инструкциям ассемблера в окне Дизассемблированный код могут отображаться следующие сведения:
Адреса в памяти, где располагается каждая из инструкций. Для собственных приложений это фактические адреса в памяти. Для кода на Visual Basic или C# это смещение относительно начала функции.
Исходный код, из которого получается код сборки.
Байты кода, то есть байтовое представление реальных инструкций компьютера или языка MSIL.
Символьные имена для адресов памяти.
Номера строк, соответствующие исходному коду.
Инструкции на языке ассемблера состоят из мнемоник, представляющих собой сокращения имен инструкций, и символов, которые обозначают переменные, регистры и константы. Каждую инструкцию машинного кода представляет одна мнемоника ассемблера, за которой следует один или несколько необязательных символов.
Код на ассемблере активно использует регистры процессора, а при использовании управляемого кода — регистры среды выполнения. Вы можете использовать окно Дизассемблированный код в сочетании с окном Регистры, которое позволяет изучить содержимое регистров.
Чтобы просмотреть инструкции машинного кода в необработанной числовой форме, а не на языке ассемблера, используйте окно Память или выберите Байты кода в контекстном меню в окне Дизассемблированный код.
Использование окна дизассемблирования
Чтобы включить окно Дизассемблированный код, выберите в разделе Сервис > Параметры > Отладка параметр Включить отладку на уровне адреса.
Чтобы открыть окно Дизассемблированный код во время отладки, выберите Windows > Дизассемблированный код или нажмите сочетание клавиш ALT+8.
Чтобы включить или отключить вывод дополнительных сведений, щелкните правой кнопкой в окне Дизассемблированный код и установите или снимите в контекстном меню соответствующие флажки.
Желтая стрелка, расположенная в левом поле, отмечает текущую точку выполнения. Для собственного кода точка выполнения соответствует счетчику команд ЦП. В этом расположении отображается следующая инструкция, которая будет выполнена в программе.
DisassemblyData
Описывает одну инструкцию дизассемблирования для отображаемой интегрированной среды разработки (IDE).
Синтаксис
Члены
bstrAddress
Адрес в виде смещения от некоторой начальной точки (обычно это начало связанной функции).
bstrCodeBytes
Байты кода для этой инструкции.
bstrOpcode
Код операции для этой инструкции.
bstrOperands
Операнды для этой инструкции.
bstrSymbol
Имя символа (если имеется), связанное с адресом (открытый символ, метка и т. д.).
uCodeLocationId
Идентификатор расположения кода для этой разобранной строки. Если адрес контекста кода в одной строке больше, чем адрес другого контекста кода, то идентификатор местонахождения кода первого будет также больше, чем идентификатор расположения кода второго.
Для текстовых документов, которые не могут быть представлены в виде имен файлов, bstrDocumentUrl является уникальным идентификатором документа, а модуль отладки должен реализовать метод GetText.
Это поле также может содержать дополнительные сведения о контрольных суммах. Дополнительные сведения см. в разделе «Примечания».
dwByteOffset
Число байтов, на которое инструкция находится в начале строки кода.
Remarks
Для документов, которые не являются текстовыми, контекст документа можно получить из кода, а bstrDocumentUrl поле должно иметь значение null. Если поле совпадает с bstrDocumentUrl bstrDocumentUrl полем в предыдущем DisassemblyData элементе массива, установите bstrDocumentUrl для параметра значение null.
Пример
Ildasm.exe (дизассемблер IL)
Дизассемблер IL является сопутствующим инструментом ассемблера IL (Ilasm.exe). Ildasm.exe принимает переносимый исполняемый файл (PE-файл), содержащий код на промежуточном языке (IL), и создает на его основе текстовый файл, который может служить входным файлом для Ilasm.exe.
Эта программа автоматически устанавливается вместе с Visual Studio. Для запуска этого средства используйте Командную строку разработчика или PowerShell для разработчиков в Visual Studio.
В командной строке введите следующее.
Синтаксис
Параметры
Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD.
Параметр | Описание |
---|---|
/out= filename | Создает выходной файл с заданным параметром filename вместо вывода результатов в графический пользовательский интерфейс. |
/rtf | Выводит данные в формате RTF. Не может использоваться с параметром /text. |
/text | Отображает результаты в окне консоли вместо вывода в графический пользовательский интерфейс или выходной файл. |
/html | Выводит данные в формате HTML. Может использоваться только с параметром /output. |
/? | Отображает синтаксис команд и параметров для средства. |
Перечисленные ниже дополнительные параметры допустимы для файлов EXE, DLL и WINMD.
PUB — открытый;
PRI — закрытый;
FAM — семейство;
ASM — сборка;
FAA — семейство и сборка;
FOA — семейство или сборка;
PSC — закрытая область.
Определения модификаторов видимости см. в описании MethodAttributes и TypeAttributes.
Перечисленные ниже параметры допустимы для файлов EXE, DLL и WINMD только при выводе в файл или окно консоли.
Параметр | Описание | ||||||||
---|---|---|---|---|---|---|---|---|---|
/all | Задает сочетание параметров /header, /bytes, /stats, /classlist и /tokens. | ||||||||
/classlist | Включает список классов, определенных в этом модуле. | ||||||||
/forward | Использует прямое объявление класса. | ||||||||
/headers | Включает сведения заголовка файла в выходные данные. | ||||||||
/item: class [ :: member [ (sig ]] | В зависимости от заданных аргументов выполняет дизассемблирование: Перечисленные ниже параметры допустимы для файлов EXE, DLL, OBJ, LIB и WINMD только при выводе в файл или окно консоли.
|