2016-12-04 2 views
-5

저는 C 언어가 처음인데 어셈블리 언어로 매핑하여 C 언어를 어셈블리 언어로 매핑하는 방법을 강구하여 스택, 레지스터, 메모리, 코드 작업이 어떻게 작동하는지에 대해 강하게 의식하고 싶습니다. C 코드를 참조하십시오. 몇 가지 어셈블리 언어 책을 읽었는데, 주로 C와 어셈블리 간의 관계보다는 어셈블리 구문에 중점을 둡니다. 누구나 C와 어셈블리 언어 사이의지도에 대한 책을 어디에서 찾을 수 있는지 알고 있습니다.C 언어를 어셈블리 언어로 매핑

+1

다른 컴파일러가 다르게 수행합니다. 심지어 동일한 컴파일러가 다른 설정에서도 다르게 수행합니다. – harold

+0

C는 스택 또는 레지스터를 필요로하지 않습니다. – Olaf

답변

0

그런 책이 있는지 나는 모른다 (만약 그렇다면 컴파일러에 관한 책 일 것이다). 그러나 더 쉬운 해결책이 있습니다. 시도해보십시오. ,이 MyFunction에 중단 점을 설정합니다

gdb ./foo 
break MyFunction 
run 
disass 

:

는 일부 C 코드를 작성 디버그 기호와 함께 컴파일 (이 지침은 리눅스를 가정) :

gcc foo.c -o foo 

을 다음, 디버거를 사용 그런 다음 중단 점에 도달 할 때까지 프로그램을 실행하십시오. disass 해당 기능의 어셈블리가 인쇄됩니다. stepi을 사용하면 한 번에 한 명령 씩 실행할 수 있으며 next을 사용하면 한 번에 한 명령 씩 실행할 수 있습니다.

+1

또는'gcc -S foo.c'를 실행하여 컴파일러에서 직접 어셈블리 파일을 생성하도록하십시오 (어셈블리 파일에서 매핑에 대한 정보가 조금 더 남을 수 있음). – microtherion

관련 문제