2011-04-23 3 views
1

죽은 간단한 C 및 x86 프로그램을 어디에서 찾을 수 있습니까? 지금까지 인터넷에서 발견 한 예제는 "여기에 Hello World in x86"에서 "자신의 운영 체제 작성"으로 곧바로 전환하는 것 같습니다. 나는 당신이 기능을 부르는 것과 같은 일을 할 때 일어나는 일을 내면화하는 데 어려움을 겪고있다.나란히보기 C, x86 프로그램

+0

x86 어셈블리 언어를 의미합니까? 또는 x86이라는 언어가 있습니까? –

답변

2

, 그래서 당신은 오히려 어셈블러 출력을 얻기 위해 다음 GCC 당신이 gcc -S yourhelloworldprogram.c을 사용할 수 있습니다 당신은 86 어셈블러를 의미 가정

gcc -O -S a.c 
+0

+1 또한 작동합니다. 스위치를 기억하지 못했습니다. –

0

x86 어셈블리 언어를 의미하는 경우 objdump --disassemble myprog (모든 GNU 시스템에서)을 사용하여 C 프로그램에서 생성 한 어셈블리 언어를 표시하십시오. 시스템에 objdump가 없으면 ndisasm을 사용할 수 있습니다.

내가 예를 들어

gcc -S a.c 

후 대부분의 시간은, 작은 및 조립을 이해하기 쉽게는 최적화에 의해 생성되는

로 볼 전화, GCC의 중간 조립 출력을 살펴 추천 할 것입니다
0

나는 ddd을 추천합니다. C 소스 (디버그 기호로 빌드 한 경우)와 기계 코드가 모두 표시 될 수 있습니다. 레지스터 및 메모리 값을 대화 형으로 프로빙하여 코드를 단계적으로 수행 할 수도 있습니다. 훌륭한 학습 도구.

0

gcc에서 옵션을 사용하면 -S 옵션보다 더 나은 옵션을 사용할 수 있습니다. 옵션은 여전히 ​​오브젝트 파일을 생성하고 프리 프로세서 파일도 가져 오기 때문입니다. verbose-asm은 프로그램의 함수와 변수 이름 및 생성 된 어셈블리 코드 사이의 링크를 만드는 주석을 어셈블리 출력에 추가하기 때문에 중요합니다. 특히 최적화와 함께 생성 할 때 소스 C와 어셈블리 사이를 연결하는 것이 종종 어렵습니다.

관련 문제