Можно ли отследить код на скомпилированном языке, построчно, до отдельных битов каждой CPU-инструкции в двоичном формате? [закрытый]

Я понимаю, что мы можем вывести эквивалентную сборку из кода C++, используя множество отладчиков и тому подобное.

а что про двоичный код? Форматирование битов в каждом байте(байтах), которые составляют фактические машинные инструкции, которые (могут) составляют микропрограммы(если микроархитектура имеет один).

Если каждая строка кода C++ должна быть каким-либо образом преобразована в машинный код и в какой-то момент программы (например, float может быть определен в C++, но не имеет смысла, пока не будет нажата на stack, поэтому он может не преобразовывать 1: 1 во весь машинный код, построчно, но будет использоваться независимо), каждый оператор и т. д., могут быть прослежены. Но отладчики не выводят образование битов, занимающих каждую отдельную инструкцию.

Если каждая программа становится отформатированные инструкции шаблон байт / бит для процессора, он должен быть возможным (я предполагаю), чтобы проследить весь код, который вы пишете фактические биты на уровне цепи.

но для полной уверенности можно, возможно сделать это в том объеме, который я описываю здесь? Современные отладчики/программное обеспечение не предлагают эту функцию, и даже те, которые, кажется, не дают полное двоичное представление каждой инструкции ясно разработчику.

PS: Это, конечно, при условии, что скомпилированный код легко исполняется с инструкциями для предполагаемой архитектуры (а не какой-то интерпретируемый язык или байт-код, для которого требуется другая программа translate for it).

4
задан bertieb
13.11.2022 10:06 Количество просмотров материала 2781
Распечатать страницу

2 ответа

вы можете использовать дизассемблер для преобразования скомпилированного двоичного кода обратно в ассемблер. Что позволит вам "читать" (с трудом) программное обеспечение, распространяемое только в двоичном.

для другой части вашего вопроса, Вы, кажется, хотите какой-то аппаратный декомпилятор, который дает более подробную информацию о том, как процессор выполняет определенную двоичную инструкцию. Я не знаю никакого инструмента для этого. Вероятно, вам придется прочитать руководства по оборудованию и выполнить такой анализ в твоей голове.

1
отвечен luser droog 2022-11-14 17:54

нет.

Ну, может быть, но нет никакой гарантии, потому что код, который входит в компилятор, редко совпадает с кодом, который выходит по двум причинам: люди ужасны в написании эффективного кода, и люди не думают о коде так же, как процессор должен его обрабатывать. Из-за этого компиляторы оптимизируют исходный код перед его преобразованием в ассемблер/двоичный. Это может привести к заявления были исключены, никчемные высказывания будут удалены, и все функции встроены.

например, следующий псевдокод:

int x = 3;
x = 3*3;
x = 4;
function mult4(number) { return number * 4; }
x = mult4(x);

можно полностью уменьшить до

int x = 16;

хороший оптимизирующий компилятор, которые не соответствуют источнику. Поэтому при отладке часто приходится отключать оптимизацию компилятора. Если все оптимизации компилятора отключены, компилятор попытается вывести сборку, соответствующую исходному коду 1 к 1.

1
отвечен Darth Android 2022-11-14 20:11

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх