Как увидеть объектный код, сгенерированный g ++?

g++ -c xyz.cpp

создает объектный файл xyz.o

Но когда я открываю его в редакторе vim, он показывает какой-то сумасшедший текст ...

Как я могу увидеть машинный код?

Какой пакет можно использовать, чтобы открыть и увидеть этот машинный код?

6
задан 8 April 2013 в 15:53

3 ответа

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

Тем не менее, вы можете читать символы из двоичных файлов следующим образом:

$ 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

0
ответ дан 8 April 2013 в 15:53

Вы должны использовать флаг -S для создания выходного кода компилятора.

Так что для вашего примера код будет g++ -S xyz.cpp, а сборка будет напечатана в xyz.s.

0
ответ дан 8 April 2013 в 15:53

Проверьте пакет binutils.

В нем вы найдете objdump - отображать информацию из объектных файлов.

Затем попробуйте запустить objdump -d xyz.o.

0
ответ дан 8 April 2013 в 15:53

Другие вопросы по тегам:

Похожие вопросы: