BIOS 데이터를 파일로 덤프하는 방법


24

랩탑의 BIOS 데이터를 파일로 덤프하고 싶습니다. 내가 찾은 유일한 해결책은 다음 명령입니다.

dd if=/dev/mem bs=X skip=Y count=1

X그리고 Y다른 BIOS 유형이 있기 때문에 다른 사람에 의해 제안 된 솔루션 다르다.

에서 BIOS 데이터의 정확한 주소를 찾는 방법이 /dev/mem있습니까? dmidecode메모리에서 BIOS의 주소 범위를 찾는 데 사용할 수 있습니까 ? 그리고 리눅스는 모든 BIOS 데이터를 RAM이나 그 일부만 덤프합니까?

Linux가 BIOS 데이터를 RAM에 덤프 할 수 있다면 루트 사용자도 BIOS에 직접 액세스 할 수 있습니까?

답변:


20

를 사용해보십시오 biosdecode.

BIOS 메모리를 구문 분석하고 알고있는 모든 구조 (또는 진입 점)에 대한 정보를 인쇄하는 명령 줄 유틸리티입니다. 다음과 같은 하드웨어에 대한 정보를 찾습니다.

  • IPMI 장치
  • 메모리의 종류와 속도
  • 섀시 정보
  • 온도 프로브
  • 냉각 장치
  • 전류 프로브
  • 프로세서 및 메모리 정보
  • 일련 번호
  • BIOS 버전
  • PCI / PCIe 슬롯 및 속도

기타

고려해야 할 사항 :

  • biosdecodeBIOS 메모리를 구문 분석하고 모든 구조에 대한 정보를 인쇄합니다.
  • BIOS 데이터 디코딩 은 컴퓨터의 DMI 덤프와 동일 합니다. DMI 테이블은 주로 시스템이 현재 구성되어에 대해 설명합니다.
  • 에서 제공 한 데이터 biosdecode는 사람이 읽을 수있는 형식이 아닙니다.

화면에서 내용보기

dmidecode화면에서 컴퓨터의 DMI (SMBIOS) 테이블 내용을 덤프 하려면 명령 을 사용해야 합니다.

$ sudo dmidecode --type 0 

자세한 내용은 매뉴얼 페이지를 검색하십시오.

$ man dmidecode

그렇습니다. 커널은 BIOS에 필요한 정보 만 RAM에 보관합니다. 그러나 임베디드 ASM (어셈블리 코드) 등이 포함 된 C 애플리케이션을 사용하여 루트 사용자로부터 실시간 BIOS 호출을 수행 할 수 있습니다.

이 기사에서 Linux 및 BIOS 라는 제목의 Linuxmagazine에서 Linux 커널 및 시스템 BIOS에 대한 자세한 내용을 읽을 수 있습니다 .


12

나는 당신이 찾고있는 것이라고 생각합니다 flashrom. 시스템이 지원되는 경우 발행하여 BIOS 컨텐츠를 읽을 수 있습니다

# flashrom -r <outputfile>

소위 CMOS RAM (RTC 등의 알람과 같이 구성을 저장하는 여분의 바이트) 만 저장하려는 경우 커널 nvram드라이버 및 장치가 다음을 수행 할 수 있습니다.

config NVRAM
     tristate "/dev/nvram support"
     depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
     ---help---
       If you say Y here and create a character special file /dev/nvram
       with major number 10 and minor number 144 using mknod ("man mknod"),
       you get read and write access to the extra bytes of non-volatile
       memory in the real time clock (RTC), which is contained in every PC
       and most Ataris.  The actual number of bytes varies, depending on the
       nvram in the system, but is usually 114 (128-14 for the RTC).

       This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
       on Ataris. /dev/nvram may be used to view settings there, or to
       change them (with some utility). It could also be used to frequently
       save a few bits of very important data that may not be lost over
       power-off and for which writing to disk is too insecure. Note
       however that most NVRAM space in a PC belongs to the BIOS and you
       should NEVER idly tamper with it. See Ralf Brown's interrupt list
       for a guide to the use of CMOS bytes by your BIOS.

       On Atari machines, /dev/nvram is always configured and does not need
       to be selected.

       To compile this driver as a module, choose M here: the
       module will be called nvram.

이것은 좋은 제안이지만 랩톱에서는 작동하지 않을 수 있습니다. 이 소프트웨어에는 랩탑 BIOS 지원이 부족합니다. 예를 들어 내가 소유 한 Thinkpad 랩톱 (여러 가지 다른 모델)에서는 실행되지 않습니다.
slm

10

다른 도구를 사용할 수 없거나 사용할 수없는 경우 덤프 할 메모리 영역을 교육적으로 추측 할 수있는 방법이 있습니다.

예를 들어 VirtualBox VM 내에서 다음을 수행하여 BIOS를 성공적으로 덤프했습니다.

$ grep ROM /proc/iomem # https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-memmap
000c0000-000c7fff : Video ROM
000e2000-000e2fff : Adapter ROM
  000f0000-000fffff : System ROM
# dd if=/dev/mem of=pcbios.rom bs=64k skip=15 count=1 # 15*64k + 64k

2
메모리 주소에 따라 어떤 크기를 사용해야하는지 어떻게 알 수 있습니까?
unseen_rider

7

옵션 바이오스 dmidecode

dmidecode -t bios

dmidecode C:0000F:FFFF없어도 메모리를 읽을 수 있습니다

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8

3

이것은 VirtualBox에서 나를 위해 일했습니다.

$ grep ROM /proc/iomem

:에서 어떤 결과
000c0000-000c7fff : 비디오 ROM의
000e2000-000e2fff : 어댑터 ROM
000f0000-000fffff : 시스템 ROM

시스템 ROM은 000f0000 (0xF0000)에서 시작합니다.

브라우저를 열고 http://www.hexadecimaldictionary.com/hexadecimal/0xF0000으로 이동 하십시오 . 이것은 10 진수 값이 983040이고 1024를 킬로바이트로 나누기 위해 시작점이며 '건너 뛰기'값인 960이라고 말합니다.

끝 번호는 0xFFFFF이며 1048575이며 1024보다 부끄럽습니다. 1024-960은 64이며 'count'의 값입니다.

BIOS를 덤프하기 위해 실행하는 명령은 다음과 같습니다.

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.