はい、PowerShellを使ってファイルの先頭のバイナリダンプ(いわゆるヘキサダンプ)を表示することは可能です。以下のような方法で、バイナリファイルの先頭 N バイトを読み取って、16進数とASCIIで表示できます。
# ダンプしたいファイルパスと読み取るバイト数
$filePath = "C:\\\\Path\\\\To\\\\File.bin"
$length = 64 # 読み取るバイト数
# ファイルをバイナリで開く
$bytes = [System.IO.File]::ReadAllBytes($filePath)[0..($length - 1)]
# 16バイトずつ表示
for ($i = 0; $i -lt $bytes.Length; $i += 16) {
$chunk = $bytes[$i..([Math]::Min($i + 15, $bytes.Length - 1))]
# オフセット表示
$offset = "{0:X8}" -f $i
# 16進数部分
$hex = ($chunk | ForEach-Object { "{0:X2}" -f $_ }).PadRight(47) -join ' '
# ASCII部分
$ascii = ($chunk | ForEach-Object {
if ($_ -ge 32 -and $_ -le 126) {
[char]$_
} else {
'.'
}
}) -join ''
# 出力
Write-Output "$offset $hex $ascii"
}
00000000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ..............
00000010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ........@.......
...
ReadAllBytes()
を使用しています。length
より小さい場合にも対応しています。xxd
相当のツール(例:CertUtil
、xxd
for Windows、またはCygwin)も併用可能です。必要であれば、任意のオフセットやバイト数の指定、逆アセンブル風の表示なども可能ですので、用途があればお知らせください。
以下は、PowerShellスクリプトファイル(例: hexdump.ps1
)として使える形式で、
ファイルパスと読み取るバイト数をパラメータとして指定できるようにしたものです。
hexdump.ps1
(スクリプト内容)