지난 며칠 동안 이것을 보았고 어떻게 작동하는지 알 수 없습니다. 제가 이야기하는 비디오는 여기에 있습니다 .
그것은의 대답은 최고 등급 이 스택 오버플로 문제에서을 : 왜이 세 가지 컴파일러에 의해 거절이 프로그램입니까?
이 비트 맵이 "Hello World"용 C ++ 프로그램을 어떻게 표시 할 수 있습니까?
지난 며칠 동안 이것을 보았고 어떻게 작동하는지 알 수 없습니다. 제가 이야기하는 비디오는 여기에 있습니다 .
그것은의 대답은 최고 등급 이 스택 오버플로 문제에서을 : 왜이 세 가지 컴파일러에 의해 거절이 프로그램입니까?
이 비트 맵이 "Hello World"용 C ++ 프로그램을 어떻게 표시 할 수 있습니까?
답변:
BMP (DIB) 이미지는 헤더와 압축되지 않은 1 색 데이터 로 구성됩니다 (24bpp 이미지의 경우 픽셀 당 3 바이트, 역행 순서 및 4 바이트 행 스트라이드로 저장 됨).
색상 데이터에 대한 바이트는 색상을 나타내는 데 사용됩니다 (즉, 파일 형식 2에 의해 "필수"되지 않으며 모두 각 픽셀의 색상에서 나옴). 픽셀 색상과 작성된 바이트 간에는 완벽한 1 : 1 대응이 있습니다. 파일에서; 따라서 완벽하게 선택된 색상을 사용하면 실제로 파일에 원하는 모든 것을 쓸 수 있습니다 (헤더 제외).
생성 된 파일을 메모장에서 열면 색상 데이터가 텍스트로 표시됩니다. BM
파일 형식에 따라 지정된 헤더 ( 텍스트 시작 부분)에서 여전히 명확하게 볼 수 있습니다 .
제 생각에이 비디오는 다음과 같은 방식으로 수행되었습니다. 먼저 작성자는 비트 맵에 필요한 크기를 계산하고 간단한 패턴으로 확장되는 색상으로 채워진 올바른 크기의 DIB 파일을 만들었습니다 (예 : 모든 바이트 65 => 'A'
); 그런 다음 동영상에 표시된 것처럼 이러한 패턴을 "페이로드"코드로 대체했습니다.
그러나 메모장으로 모든 것을 수작업으로 만드는 것은 불가능하지 않습니다. 색상 선택기 대화 상자, ASCII 테이블 및 DIB 형식에 대한 기본 지식을 사용하여 수행 할 수 있지만 훨씬 느리고 오류가 발생하기 쉽습니다.
만우절 질문 중 하나에 대한 답을 언급하고 있다고 가정합니다.
내 생각 엔 각 픽셀에는 이진 표현이 있습니다. 그리고 소스 코드의 각 문자에는 이진 표현이 있습니다.
프로그램을 만든 사람은 각 문자에 해당하는 이진 표현이있는 각 픽셀의 색상을 계산 했어야합니다.
이론적 인 컴퓨터 과학의 관점에서 보면 모든 프로그램이 그러한 방식으로 작성 될 수 있는지 묻는 것이 흥미로울 것입니다. 비트 맵으로 볼 때 실제로 동일한 작업을 수행하는 소스 코드를 볼 수 있습니다. 그러한 결과에 진지하게 관심이 있다면, 예를 들어 Kleene의 고정 소수점 정리에 대해 읽어보십시오 .
이미지로서의 프로그램은 코드 난독 화의 한 형태로 볼 수도 있습니다. 특히 실용적이지 않았다 ...