アニメ『ハイスクールDxD NEW』
ゴールデンウィークは、ほぼハイスクールDxD三昧です。面白いです。
前回WindowsにインストールしたGNUWinのddコマンドでオール0のバイナリデータを生成しようとしましたが、/dev/zeroがなくて断念しました。
ddで生成するのは諦めた方がよいでしょうか。
では、Windowsでバイナリデータを生成するには。。。
以前「PowerShell(バイナリ書き込み)」で確認したPowerShellのscコマンド(Set-Content)を使って生成してみます。
まずPowerShellを起動
C:\Users\takk\tmp>powershell Windows PowerShell Copyright (C) 2014 Microsoft Corporation. All rights reserved. PS C:\Users\takk\tmp>
sc(Set-Content)で、0 1 2 3 4 5というバイナリファイルa.binを生成します。
PS C:\Users\takk\tmp> ls PS C:\Users\takk\tmp> [byte[]]$bin=0..5 PS C:\Users\takk\tmp> sc -value $bin -enc byte a.bin PS C:\Users\takk\tmp>
確認はGNUWin(coreutils)のod使います。
PS C:\Users\takk\tmp> od -tx1 a.bin 0000000 00 01 02 03 04 05 0000006 PS C:\Users\takk\tmp>
PowerShellすごいです。ならPowerShellでいいんじゃないかなと思います。
でも、どうしてもddを使いたい時のため、何か考えてみます。
ddは、コピーするコマンドなので、PowerShellでバイナリを少しだけ生成し、ddでコピー時に保管する機能を使ってよりおおきなバイナリにしてみます。
C:\Users\takk\tmp>dd if=a.bin of=b.bin ibs=10 conv=sync 0+1 records in 0+1 records out 10 bytes (10 B) copied, 0.0009823 seconds, -0.0 kB/s C:\Users\takk\tmp>
PowerShellで生成した6Byteのa.binをコピー元として、ddコマンドのcnov=syncオプションを使い0値を補完して、10Byteのファイルにしました。
odでも確認してみます。
C:\Users\takk\tmp>od -tx1 -Ax b.bin 000000 00 01 02 03 04 05 00 00 00 00 00000a C:\Users\takk\tmp>
PowerShellで0値1Byteだけのファイルを作っておき、ddコマンドで伸ばしてみます。
PS C:\Users\takk\tmp> sc -value ([byte]0) -enc byte a.bin PS C:\Users\takk\tmp> od -tx1 a.bin 0000000 00 0000001 PS C:\Users\takk\tmp> dd if=a.bin of=b.bin ibs=100 conv=sync 0+1 records in 0+1 records out 100 bytes (100 B) copied, 0.0019636 seconds, -5177106467945982400000000000000000 00000000000000000000000 kB/s PS C:\Users\takk\tmp> od -tx1 -Ax b.bin 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 * 000060 00 00 00 00 000064 PS C:\Users\takk\tmp>
できるデータが単純な割に、コマンド入力が多いので実用的じゃないですが、頭の体操として使っていこうと思います。
ちなみにtouchで空ファイルを生成して、ddコマンドのconv=syncで補完はできるのでしょうか。
C:\Users\takk\tmp>rm a.bin C:\Users\takk\tmp> C:\Users\takk\tmp>touch a.bin C:\Users\takk\tmp>od -tx1 a.bin 0000000 C:\Users\takk\tmp>wc -c a.bin 0 a.bin C:\Users\takk\tmp>dd if=a.bin of=b.bin ibs=100 conv=sync 0+0 records in 0+0 records out 0 bytes (0 B) copied, 0 seconds, Infinity B/s C:\Users\takk\tmp>
データが何もないと、補完もされないようです。
コメント