모든 것을 올바르게 이해했다면
좀 빠지는.
이진 파일이며 그 데이터는 우리 인간에게는 이해할 수 없습니다
일반적으로 이진 파일은 특히 파일의 목적을 알 수없는 경우 사람과 컴퓨터에서 이해할 수 없습니다. 모든 이진 파일이 실행 파일 인 것은 아닙니다. 많은 이진 파일은 컴퓨터 명령어가 포함되지 않은 데이터 파일입니다. 그렇기 때문에 파일 이름을 지정할 때 파일 확장자가 사용됩니다 (일부 OS에서). . com 확장명은 CP / M에서 실행 파일을 나타 내기 위해 사용되었습니다. . exe 확장자는 다른 실행 파일 형식을 나타 내기 위해 MS-DOS에 의해 추가되었습니다. * nixes는 execute 속성을 사용하여 코드는 물론 스크립트 일 수도 있지만 실행할 수있는 파일을 나타냅니다.
다른 사람들이 이미 언급했듯이 숫자를 포함하는 이진 파일은 텍스트 뷰어가 아닌 16 진 덤프 프로그램 또는 16 진 편집기로보아야합니다.
ping.exe 프로그램의 내용의 예가 있습니다
이 파일은 실제로 재배치 가능한 프로그램이며 해당 파일의 모든 데이터가 기계 코드를 나타내는 것은 아닙니다. 필요한 동적 라이브러리, 링크 할 루틴, 스택 및 프로그램 및 데이터 메모리 요구 사항, 프로그램 시작점 등 프로그램에 대한 정보가 있습니다. 파일의 주소 피연산자는 절대 값으로 계산해야하는 상대적인 값이거나 해결해야하는 참조 일 수 있습니다.
아마도 "프로그램 파일"을 바이너리 이미지 파일 또는 프로그램 메모리 덤프라고합니다. 이러한 파일에는 머신 주소와 데이터 만 포함되며 모든 주소 참조는 실행을 위해 올바르게 설정됩니다.
어셈블리 코드 (가장 낮은 수준의 기계어)를 알고 있더라도
어셈블리 언어는 기계 언어와 다릅니다 . 일반적인 (고급 언어 컴퓨터 제외) CPU는 한 번에 한 명령 씩 머신 코드를 입력으로 받아들입니다. 피연산자는 레지스터 또는 숫자 메모리 주소입니다. 어셈블리 언어는 명령 위치 및 변수에 기호 레이블을 사용하고 숫자 op 코드를 니모닉으로 대체 할 수있는 고급 언어입니다 . 어셈블리 언어 프로그램은 실제로 실행되기 전에 기계 언어 / 코드로 변환해야합니다 (일반적으로 어셈블러, 링커 및 로더라는 유틸리티에 의해).
심볼 파일의 일부 성공 및 손실로 프로그램 파일에서 역 조작, 디스 어셈블을 수행 할 수 있습니다. 코드 및 데이터 위치를 수동으로 식별해야하기 때문에 메모리 덤프 또는 프로그램 이미지 파일의 분해가 더 시행 착오입니다.
BTW (숫자) 기계 코드를 읽고 코딩 할 수있는 사람이 있습니다. 물론 이것은 12 개의 메모리 주소 모드를 가진 32 비트 CISC 프로세서보다 8 비트 CPU 또는 마이크로 컨트롤러에서 훨씬 더 쉽습니다.