Os X에서는 다음과 같은 명령으로 C 프로그램을 컴파일했습니다. gcc -o binaryoutName inputfile
결과 바이너리 "Exec"파일에 대해 16 진 덤프를 생성했습니다. 내가 이해 하듯이, Exec 파일은 UNIX 실행 파일이며 UNIX는 실행 파일과 동일합니다. 내가 명령 xxd -b binary
을 사용하여 진수 덤프를 실행Unix 실행 파일 'Exec', 16 진수 덤프는 어셈블리가 아닌 C 코드를 보여줍니다.
, 그것은 그러나이 ASCII 내가 처음에 .c 파일을 프로그램 리터럴 C 코드를 표현, 바이너리의 ASCII 내용을 반환
진수 덤프 추출합니다. : 맨 오른쪽 열에서 ASCII 번역 내가 처음에 컴파일 된 .c 파일 내부 코드와 매우 유사하다는 것을
는0007c4a: 01101100 01110101 01110011 01101000 00000000 01011111 lush._ 0007c50: 01100110 01101111 01110000 01100101 01101110 00000000 fopen. 0007c56: 01011111 01100110 01110000 01110010 01101001 01101110 _fprin 0007c5c: 01110100 01100110 00000000 01011111 01100111 01100101 tf._ge 0007c62: 01110100 01100011 01101000 01100001 01110010 00000000 tchar. 0007c68: 01011111 01100111 01100101 01110100 01100011 01110111 _getcw 0007c6e: 01100100 00000000 01011111 01100111 01100101 01110100 d._get 0007c74: 01100101 01101110 01110110 00000000 01011111 01101100 env._l 0007c7a: 01101111 01100011 01100001 01101100 01110100 01101001 ocalti 0007c80: 01101101 01100101 00000000 01011111 01101101 01100101 me._me 0007c86: 01101101 01100011 01110000 01111001 00000000 01011111 mcpy._ 0007c8c: 01110000 01110010 01101001 01101110 01110100 01100110 printf 0007c92: 00000000 01011111 01110000 01110101 01110100 01100011 ._putc 0007c98: 01101000 01100001 01110010 00000000 01011111 01110011 har._s 0007c9e: 01100011 01100001 01101110 01100110 00000000 01011111 canf._ 0007ca4: 01110011 01101100 01100101 01100101 01110000 00000000 sleep.
참고. 이것은 컴파일러가 논리적으로 컴파일 할 어셈블리 코드의 ASCII 바이너리가 16 진 덤프에 포함될 것으로 예상했기 때문에 반 직관적입니다.
이것은 컴파일 과정에 대한 이해의 한계에 관한 질문이며 잘못된 몇 가지 세부 사항이있을 것으로 예상됩니다.
내 질문 : 16 진수 덤프가 어셈블리 대신 C 코드의 ASCII를 반환 한 이유는 무엇입니까?
미리 감사드립니다.
우리는 어떻게 가능하게 알 수 있습니까? 아마도 일부 명령이 잘못 실행 된 것일 수 있습니다. 실제 데이터를 표시하지 않으면 아무 것도 확인할 수 없습니다. – kaylum
어떻게'gcc'를 호출 했습니까? – Serge
명령은 'gcc -o BinaryOuputfile FilenameInput'이었습니다. 컴파일하는 동안 명령 구문이 정확했기 때문에 질문을 작성할 때 실수했습니다. 16 진 덤프 추출이 포함되었습니다. – user4493605