2016-06-23 8 views
0

Предположим, что я создал программу на С ++ и скомпилировал ее. Теперь у вас есть код сборки. Тогда, если я использую код сборки в asm(), будет ли он иметь тот же результат? Если это так, для чего мы можем его использовать?Вставить скомпилированную встроенную сборку обратно в C++

+1

Это не будет то же самое. Переменные, procs и многое другое будут заменены смещениями, код может быть оптимизирован и т. Д. Но вы можете использовать его для внесения изменений в поток или логику (например, вирус). –

+0

Итак, некоторые, некоторые нет? –

+1

Проблема в том, что asm - это не единственное, что нужно для воспроизведения программы. Вам также нужны те же разделы, смещения кода, привязка ... которые не могут быть включены в список разборки. – ElderBug

ответ

1

Большинство компиляторов обычно имеют опцию, которая позволяет создать полный список агрегатов, однако нет необходимости просто вставлять сгенерированный код сборки в asm ("").

Использование списка сборки, как правило, заключается в понимании того, как работает компилятор, чтобы написать код на C/C++ таким образом, чтобы полученный код сборки был 1. эффективный во времени. 2. экономичный в памяти.

В случае использования высоких уровней оптимизации компилятора, во время или памяти, полученный код, как правило, 3. немного отличается в его логика, чем код оригинального C/C++ 4. может содержать ошибки. Полный список помогает понять связь между исходным кодом C/C++ с созданным кодом сборки.

  1. В процессорах ограничено количество памяти кода и данных. Возможно, важно увидеть в сборке сборку, размеры кода памяти и распределения данных.
  2. В случае реализации алгоритма, такого как БПФ, который обычно требует определенных выравниваний по адресам данных, может быть важно увидеть, что эти выравнивания также выполняются.

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

Лист сборки может быть позже собран для создания объектного кода, как это сделано в основном непосредственно компилятором.