使用批处理文件将二进制文件转换为HEX表示形式

Esa*_*aty 3 binary batch-file

我需要将DLL文件转换为十六进制表示形式,以将其用作字符串的一部分来创建这样的sql服务器程序集

CREATE ASSEMBLY [AssemblyNameHere]
FROM 0x4D5A90000300000004000000FFFF000......continue binary data
WITH PERMISSION_SET = EXTERNAL_ACCESS

由于多种原因,我需要将此文件放入批处理文件中,但似乎FOR语句仅适用于文本文件。

npo*_*aka 5

最简单的方法是使用CERTUTIL命令:

certutil -encodehex c:\myfile.dll myfile.hex
Run Code Online (Sandbox Code Playgroud)

  • 如果您想拥有没有地址列、ASCII 表示和字节值之间的空格的原始十六进制内容,请在命令行末尾添加“12”,如下所示:certutil -encodehex c:\myfile.dll myfile.hex 12 (4认同)
  • 以下是可以使用的各种格式类型的描述:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379887(v=vs.85).aspx (2认同)

jeb*_*jeb 4

用纯批处理创建十六进制输出并不是一个好主意。

但是您可以使用 vbscript 或执行简单的任务 FC.exe 可以工作。

@echo off
SETLOCAL EnableDelayedExpansion
set filesize=%~z1
set "hexVal=41"
set "x10=AAAAAAAAAA"

set /a chunks=1+filesize / 10

del dummy.txt 2>nul > nul
for /L %%n in (0,1,%chunks%) DO (
  <nul >> dummy.txt set /p ".=%x10%"
)

set /a expectedNum=0
for /F "eol=F usebackq tokens=1,2 skip=1 delims=:[] " %%A in (`fc /b "%~dpf1" dummy.txt`) DO (
    set /a num=0x%%A && (
            set /a numDec=num-1
        set "hex=%%B"

        for /L %%n in (!expectedNum!=,=1 !numDec!) DO (
            echo %hexVal%
        )
        set /a expectedNum=num+1
        echo !hex!
    )
)
Run Code Online (Sandbox Code Playgroud)

首先,我创建一个(几乎)相同长度的文件,然后将它们与二进制模式下的 FC 进行比较(/B),扫描输出,如果检测到行缺失,则用 x10 字符串的 hexVal 填充它们(在本例中 0x41='A')。