dd를 사용하여 바이너리 파일의 다른 부분을 추출하는 더 빠른 방법

dd를 사용하여 바이너리 파일의 다른 부분을 추출하는 더 빠른 방법

dd파일로 많은 일을 할 수 있는 이 프로그램에 누군가가 도움을 줄 수 있기를 바랍니다 .

먼저 이 프로그램을 사용하여 NES ROM을 그래픽과 코드(코드용 1024Kb, 그래픽용 512Kb)의 2개 파일로 자릅니다. 16바이트 헤더로 시작합니다. "NESASM" 어셈블러에 넣기 전에 이 헤더를 제거해야 합니다.

dd이것이 작용하는 곳 입니다 . 나는 작동하는 설정을 가지고 있습니다.

dd if=MMC5 EXAtt MegaMan3.nes of=PRGrom.bin bs=16 skip=1 count=64k
dd if=MMC5 EXAtt MegaMan3.nes of=CHRgfx.bin bs=16 skip=65537 count=32k

원하는 대로 처음 16바이트를 건너뜁니다. 그러나 완료하는 데 속도가 느립니다. 나는 여러 시간 동안 인터넷 검색을 했고 stackexchange에서 iflag=skip_bytes이 작업을 수행하는 방법에 대한 수많은 스레드를 보았습니다...바이트블록 대신. 하지만 내 버전에서는 dd이를 지원하지 않는 것 같습니다.

dd여기 누군가가 "바이트 건너뛰기" 명령을 지원하는 업로드 가능한 버전을 가지고 있기를 바랍니다 . 내가 하고 싶은 일은

  • 처음 16바이트만 건너뛰기
  • 그리고 이를 512KB 청크로 분할하면 한 번에 16바이트를 처리하는 것보다 훨씬 빠릅니다.

내가 시도한 한 가지 방법은 bs=16 skip=1입력 파일 라인의 시작 부분에 넣은 다음 bs=512k출력 파일 라인에 넣는 것이었지만 작동하지 않았습니다. 여전히 한 번에 16바이트만 수행합니다. (이런 여러가지 방법을 시도해봤지만)

나는 dd출신이 페이지처음에는 바이트 계산 또는 바이트 건너뛰기 옵션이 없습니다.

dd저는 Visual Studio 2010을 다운로드하거나 새 버전에 필요한 것을 구하는 번거로움을 겪고 싶지 않습니다 . 여기저기 찾아봤는데 github이나 다른 곳에서만 소스코드 파일을 다운로드 받을 수 있으니까요. 나는 이 모든 GNU 도구를 원하지 않습니다 dd. 그게 전부입니다.

저는 Linux나 다른 유형의 운영 체제가 아닌 Windows XP를 사용하고 있습니다(도움이 된다면). 이것이 잘못된 포럼이라면 사과드립니다. 내가 본 대부분의 테마는 dd이 주제에 전념합니다.

답변1

head대신 GNU coreutils를 사용할 수 있습니다 .

{
  head -c 16   > /dev/null
  head -c 1m   > PRGrom.bin
  head -c 512k > CHRgfx.bin
} < 'MMC5 EXAtt MegaMan3.nes'

(이것은 Unix 셸 구문이므로 Microsoft 명령줄 해석기를 사용하는 경우 조정해야 할 수도 있습니다.)

cygwin대신 Windows에서 고대 환경을 사용하는 것을 고려해 볼 수도 있습니다 gnuwin32. 그러면 최신 GNU에 더 가까운 환경이 제공됩니다(리눅스하나도 아니야운영 체제그런데, 일부 Unix 계열 및 Unix 계열이 아닌 운영 체제에서 발견되는 커널입니다.

skip_bytes2012년에 GNU에 추가되었습니다 dd(coreutils 8.16). gnuwin32의 최신 버전은 2005년 버전입니다(비록 Windows XP에서는 최신 버전이라고 가정하지만). dd다음을 포함하여 최신 버전의 GNU coreutils의 컴파일된 버전을 찾을 수 있습니다.시빈그리고윈도우용 힘내적어도 둘 다 POSIX 쉘 인터프리터와 함께 제공됩니다. Cygwin이 Windows XP 지원을 중단했습니다.2016년경, 하지만 현재 버전은 계속 다운로드할 수 있습니다.거기예를 들어. Windows용 Git은 버전 2.10.0 이후 Windows XP에 대한 지원을 중단했지만온라인에서는 아직 이용 가능, 모두 coretutils 8.16 버전보다 최신 버전입니다.

관련 정보