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バイトを処理するよりもはるかに高速です。

私が試した1つの方法は、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に近い環境が提供されます(Linux一つでもないオペレーティングシステムところで、一部のUnixファミリーやUnixファミリーではなく、オペレーティングシステムに見られるカーネルです。

skip_bytes2012年にGNUに追加されましたdd(coreutils 8.16)。 gnuwin32の最新バージョンは2005年です(ただし、Windows XPでは最新バージョンであると仮定しています)。dd以下を含む、最新バージョンのGNU coreutilsのコンパイル済みバージョンを見つけることができます。シビンそしてWindows用Git少なくとも両方がPOSIXシェルインタプリタに付属しています。 CygwinがWindows XPのサポートを停止しました。2016年頃しかし、現在のバージョンは引き続きダウンロードできます。そこ例えば。 Windows用Gitはバージョン2.10.0以降のWindows XPのサポートを中止しましたが、オンラインではまだ利用可能、すべてcoretutils 8.16バージョンよりも最新のバージョンです。

関連情報