2014-07-07 13 views
9

Zastanawiasz się, czy możliwe jest wygenerowanie przeplecionego źródła i złożenia z klang? szukam czegoś odpowiednik polecenia gcc (co wykazano w http://www.fclose.com/240/generate-a-mixed-source-and-assembly-listing-using-gcc/)klang przeplecione źródło i zespół

gcc -Wa,-adhln -g source_code.c > assembly_list.s 

mam link oglądany: How do you get assembler output from C/C++ source in gcc? ale robi się tak daleko, aby wymienić zespół - ale nie przeplot.

także Visual Studio nie daje całkiem ładny montażowej przeplotem, szczegóły tutaj: How to view the assembly behind the code using Visual C++?

Dziękuję za wszelką pomoc.

Sarang

Odpowiedz

7

Wydaje się być to błąd w ubiegłym roku odnotowano czasami podając dokładnie to: http://llvm.org/bugs/show_bug.cgi?id=16647

Bug 16647 - No option to produce mixed source + assembly listing? 

Tak, ponieważ jest jeszcze NEW Chyba dzyń nie ma jeszcze tego obsługiwane.

Alternatywnie, jak skompilować kod, a następnie użyć objdump -S? Format wyjściowy jest nieco podobny ...

3

Od sierpnia 2016 r. Błąd, o którym wspomniał @dragosht, jest nadal otwarty. Istnieje jednak obejście oferowane przez the linked bug 17465: clang -no-integrated-as -Xassembler -adhln. Wyłącza zintegrowany clang asembler i wywołuje zewnętrzny asembler, który, mam nadzieję, obsługuje opcje generowania listy.

Działa to dobrze w systemie Linux, ale nie działa w systemie Mac OS X (stan na 10.11.6). Problem polega na tym, że nawet zewnętrzny asembler w OS X nie obsługuje opcji generowania listy - możesz to sprawdzić za pomocą man as.

objdump -S to alternatywa, która działa również dobrze w systemie Linux, ale alternatywą dla systemu Mac OS X jest objool, który ma funkcję dezasemblowania, ale nie przeplotu. Mam nadzieję, że to się wkrótce zmieni, bo otool wydaje się być w drodze, podczas gdy llvm rozwija własną objdump. Zobacz man llvm-otool.

Wreszcie, dla OS X najlepsza opcja wydaje się używać gobjdump -S, z binutils. Można go zainstalować z systemem MacPorts lub naparować.