g++ -c xyz.cpp
создает объектный файл xyz.o
Но когда я открываю его в редакторе vim, он показывает какой-то сумасшедший текст ...
Как я могу увидеть машинный код?
Какой пакет можно использовать, чтобы открыть и увидеть этот машинный код?
Машинный код, сгенерированный вашим компилятором, не должен быть удобочитаемым человеком, а скорее полностью оптимизирован для максимально быстрой работы на вашем процессоре.
Тем не менее, вы можете читать символы из двоичных файлов следующим образом:
$ nm main.o | c++filt
U _Unwind_Resume
U FactoryImpl::FactoryImpl()
U UI::UI(Subject*)
U operator delete(void*)
U operator new(unsigned long)
U __gxx_personality_v0
0000000000000000 T main
Примечания:
nm
и c++filt
из пакета binutils
, который вы, вероятно, уже использовали при разработке. Я только что понял, что мой ответ на самом деле не отвечает на ваш вопрос о чтении действительного машинного кода. Тем не менее, я думаю, что он предоставляет некоторую полезную информацию вместо этого. Для чтения операций на уровне сборки для вашего процессора используйте objdump -d
, как предложено @hnasarat
Вы должны использовать флаг -S
для создания выходного кода компилятора.
Так что для вашего примера код будет g++ -S xyz.cpp
, а сборка будет напечатана в xyz.s
.
Проверьте пакет binutils
.
В нем вы найдете objdump - отображать информацию из объектных файлов.
Затем попробуйте запустить objdump -d xyz.o
.