vmlinuz를 vmlinux로 압축 해제하려면 어떻게합니까? | grep ‘1f 8b

압축 해제, gzip 및 Google 결과로 나타나는 다른 모든 솔루션을 이미 시도했지만 이것들이 효과가 없었습니다.

GZ 서명에 대한 이미지 검색 만하려면- 1f 8b 08 00.

> od -A d -t x1 vmlinuz | grep '1f 8b 08 00'
0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45

이미지는에서 시작합니다 24576+8 => 24584. 그런 다음 지점에서 이미지를 복사하고 압축을 풉니 다.

> dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux
1450414+0 records in
1450414+0 records out
1450414 bytes (1.5 MB) copied, 6.78127 s, 214 kB/s

http://www.codeguru.com/forum/showthread.php?t=415186 온라인 포럼에서 다음 지침을 그대로 사용했습니다 .

이 프로세스는 저에게 효과적이지 않으며 파일에 0024576을 찾을 수 없다는 오류와 모든 후속 번호가 표시됩니다.

vmlinuz에서 vmlinux 추출을 어떻게 진행합니까?

감사합니다.

편집 : 이것은 리버스 엔지니어링 질문입니다. RPM을 설치하거나 다시 컴파일하기 위해 배포판에 액세스 할 수 없습니다. 나는 vmlinuz만으로 시작합니다.



답변

그 글의 저자가 무엇을 의미하는지 오해했을 수도 있습니다.

  1. vmlinuz어디 gzip으로 압축 된 콘텐츠 시작을 찾을 필요하므로 파일은 gzip으로 압축 된 내용 외에 다른 것들을 포함한다. 그렇게하려면 다음을 사용하십시오.

    od -A d -t x1 vmlinuz | grep '1f 8b 08 00'
    

    이 작업은 해당 파일에서 gzip 헤더를 찾을 수있는 위치를 표시하는 것입니다. 결과는 다음과 같습니다.

    0024576 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45
    

    이것은 파일에서 0024576(적어도 글의 저자에게는 완전히 다른 곳일 수 있음) vmlinuz바이너리 값 ” 24 26 27 00 ae 21 16 00 1f 8b 08 00 7f 2f 6b 45“을 찾을 수 있음을 의미합니다 . 당신은 찾고있는 1f 8b 08 00캐릭터 9부터 또는 0024576 + 8(0부터 시작 )에서 찾을 수 있습니다 = 24584.

  2. gzipped 컨텐츠가 시작되는 위치 (위치 24584) 를 알았 dd으므로 gzipped 컨텐츠를 추출하고 압축 해제 하는 데 사용할 수 있습니다 . 그렇게하려면 다음을 사용하십시오.

    dd if=vmlinuz bs=1 skip=24584 | zcat > vmlinux
    

    첫 번째 명령은 해당 위치를 찾고 모든 것을 표준 출력에 복사합니다. zcat그런 다음 stdin에서 얻은 모든 것을 압축 해제하고 압축되지 않은 문자열을 stdout으로 출력합니다. 그러면 의 출력이라는 이름의 새 파일로 >리디렉션됩니다 .zcatvmlinux


답변

커널 소스에는 이제이를위한 스크립트가 포함되어 있습니다extract-vmlinux . 직접 굴릴 필요는 없습니다.

이 SO 답변을 참조하십시오 .


답변

실제로 vmlinuz파일을 생성하기 전에 대부분의 심볼이 제거됩니다. 따라서에서 true vmlinux를 다시 작성할 수 없으므로 vmlinuz파일은 디버깅에 유용하지 않습니다.


답변

간단한 문제가 발생하여 충돌에 대한 올바른 버전의 vmlinux를 찾고 있습니다. vmlinuz를 vmlinux로 압축 해제하려고 시도하는 대신.

더 나은 해결책은 RPM을 설치하십시오. kernel-debuginfoRPM에는 적절한 vmlinux 파일이 포함되어 있습니다.

rpm 이름에주의하십시오. 유사한 이름이 여러 개 있습니다. 있어야합니다 :kernel-debuginfo-$(version).rpm


답변

최신 커널이 항상 (일반적으로는 아닙니다) gzip 압축 된 것은 아닙니다. bzip2 또는 LZMA를 사용할 수 있습니다. 빠른 웹 검색은 압축 방법의 마법 문자열을 찾는 데 도움이되지 않았습니다. 압축 해제 코드가 포함 된 고정 헤더를 찾기 위해 여러 커널 이미지를 확인하는 것이 좋습니다.


답변

위의 압축 해제 라인이 나를 위해 일했고 물론 커널이 제거되었습니다. 따라서 좋은 정보가 없습니다.

디버그에 넣는 것과 같이 이전 커널을 변경해야하는 경우 커널 uname -r개정판을 가져 와서 소스를 가져 오십시오.

sudo apt-get source linux-image-\`uname -r\`

소스는 /usr/src/linux... cd소스 트리에 있으며 다음과 같습니다.

make oldconfig
make

이것은 현재 실행중인 커널에 대한 설정을 포함하는 파일을 찾으려고 시도합니다.

/boot/config-\`uname -r\`

이 빌드에 사용하여 실행중인 커널을 다시 만듭니다.

원하는 방식으로 빌드하십시오. 필요에 따라 고정되지 않은 커널에 액세스 할 수 있습니다.

위의 쉘은 간격으로 인해 gzip 매직 번호를 찾지 못할 것입니다. 예, 원래 토론 후 1 년을 쓰고 있지만 여전히 같은 방식으로 압축됩니다. 출력을 보내 거나로 less검색하십시오 . 나머지 바이트를 수동으로 확인하여 일치를 판별하고 첫 번째 인스턴스가 있는지 확인하십시오. 발견 된 오프셋을 10 진수로 기억하십시오.1f 8b1f


답변