vmlinuz를 vmlinux로 압축 해제하려면 어떻게합니까?


20

압축 해제, 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만으로 시작합니다.


2
왜 이러고 싶니?
Flimzy

이것은 실제로 무언가를해야하는 친구를위한 것입니다. 그 질문은 흥미로워 보였고 나는 학문적 관심을 끌기 위해 그것을 추구했습니다. 이에 대한 대안은 커널을 빌드하는 것입니다 :-/

글쎄, 학문적 흥미를 위해, 그것이 가능한지 잘 모르겠습니다. 나는 vmlinuz 커널에 실행 가능한 프리앰블이 있다고 생각합니다. 본질적으로 자동 압축 풀림 아카이브입니다. 그렇기 때문에 스트레이트 건 집을 사용하는 것이 효과가 없었습니다. 인용 된 방법은 해당 프리앰블을 지나치려고 시도합니다. 작동하지 않는 이유는 확실하지 않습니다. 학업에 관심이있는 다른 누군가에게 유용한 답변을 제공 할 수 있습니다. :)
Flimzy 2016 년

답변:


30

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

  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


감사! 이제 말이 되네요. 그러나 '1f 8b 08 00'은 몇 초의 실행 후 내 커널에 대해 아무것도 반환하지 않았습니다. 분명히 코드가 변경되었습니다. 새로운 매직 넘버를 얻는 방법에 대한 제안이 있으십니까?

@Lord Loh .: 두 가지 가능성 : 1)의 수는 od의 출력 에서 선 경계를 넘습니다 . bgrep 을 사용 하여 검색 하십시오 1f8b0800. 2) 커널은 다른 알고리즘을 사용하여 압축됩니다. 시도 fd377a585a00에 대한 XZ 또는 425a6839위해 의 bzip2 .
grawity

@ grawity-답장을 보내 주셔서 감사합니다. 나는 그것을 시도했다. 1f8b0800, fd377a585a00 및 425a6839 모두 결과를 반환하지 않았습니다. 내가 어떤 결과를 얻었다까지 바이트 마법 문자열 바이트를 자르고 시작하고, 그래서 그들은 경기의 수백했다 :-( 그래서 내가 성공하지 않고 여전히입니다.
주님 Loh 씨.

minimodding.com/… 에 따르면 LZMA는 "5d 00 00 80" 입니다. 여전히 나를 위해 일하지 않았다.
Sam Brightman

27

1
우분투 14.04에서 사용할 수 있습니까? git repo에서 보았습니다. 어떤 우분투 패키지에서 찾을 수 있습니까? -감사합니다 :-)
주님 Loh.

@LordLoh는 apt-file search extract-vmlinux여러 리눅스 커널 헤더 패키지 및 제공 locate extract-vmlinux내 로컬 우분투 18.04 시스템에서 몇 안타로 리드를 : /usr/src/linux-headers-4.15.0-33/scripts/extract-vmlinux아무것도하지만 PATH이 보인다.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

ARM의 경우는 실패 "추출물의 vmlinux :의 vmlinux 찾을 수 없습니다" unix.stackexchange.com/questions/352215/...
치로 틸리가新疆改造中心法轮功六四事件

7

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


2

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

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

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


1

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


1

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

디버그에 넣는 것과 같이 이전 커널을 변경해야하는 경우 커널 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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.