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

Я старался как-то заставить звук наушников работать на моем iMac с 12.04 и 12.10. Ничего не сработало за последнее время:

обновлено до ядра Linux 3.7.3.

Теперь все работает от наушников.

Надеюсь, это поможет.

Приветствия!

1
задан 8 April 2013 в 16:53

2 ответа

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

Однако вы можете читать символы из двоичных файлов, подобных этому :

$ 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, который вы, вероятно, уже имеете при разработке. вы можете просматривать только символы, если они не удалены параметрами компилятора.

может

2
ответ дан 25 May 2018 в 06:24
  • 1
    Но как читать символы? Он показывает что-то вроде этого: ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ [^ @ ^ @ ^ @ ^ D ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ – Sam 18 September 2012 в 01:38
  • 2
    @SAM Что именно вы не понимаете в примере в моем ответе? Он отображает символы из моего файла main.o с заданной командой. Попробуйте запустить то же самое в файле .o. – gertvdijk 18 September 2012 в 01:39
  • 3
    @SAM Я пропустил какую-то важную часть вашего вопроса. См. Мой обновленный ответ – gertvdijk 18 September 2012 в 01:51

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

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

1
ответ дан 25 May 2018 в 06:24
  • 1
    Если вы также выбираете самый низкий уровень оптимизации -O0, вы можете найти объектный код более понятным, поскольку для промежуточного кода были применены менее оптимизационные преобразования. – Colin Ian King 18 September 2012 в 03:16
  • 2
    -O0 - это (обычно) уровень оптимизации по умолчанию, поэтому я чувствовал себя в безопасности, оставляя его. – Alex L. 18 September 2012 в 19:28

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

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