2012-05-29 121 views
0

我想自動執行十六進制編輯, 十六進制編輯器是HxD.exe 我將HxD.exe複製到將被編輯的exe文件夾中。 我想某種: 開放hxd.exe開放etc.exe 變化0004A0-0004A3 00 00 80 3F 到 00 00 40 3F創建bat文件

我怎麼能這樣做?

回答

0

不知道HxD.exe的細節,很難說清楚。但是,您可以使用Windows PowerShell來實現周圍的操作。例如:

# Assuming hxd.exe and <SourceFile> exist in c:\MyFolder 
Set-Location -Path:c:\MyFolder; 
# 
Start-Process -FilePath:hxd.exe -ArgumentList:'-hxd args -go here'; 

而不是改變當前目錄下,你還可以設置進程的工作目錄是這樣的:

Start-Process -WorkingDirectory:c:\MyFolder -FilePath:hxd.exe -ArgumentList:'-hxd args -go here'; 

根據如何hxd.exe的作品,你也可能能夠將hxd.exe放置在任意文件夾中,並使用其絕對路徑傳入源文件:

$SourceFile = 'c:\MyFolder\sourcefile.bin'; 
$HxD = 'c:\path\to\hxd.exe'; 
Start-Process -FilePath $HxD -ArgumentList ('-SourceFile "{0}" -Range 0004A0-0004A3' -f $SourceFile); 

希望這能爲您帶來正確的方向。

0

我沒有看到HxD網站上列出的任何命令行選項,所以我打算給你一個純粹的PowerShell替代方案,假設編輯文件對你來說比你用來製作的程序更重要的編輯(以及是否有可用的PowerShell)...

複製以下到一個名爲編輯-Hex.ps1文件:

<# 
.Parameter FileName 
The name of the file to open for editing. 

.Parameter EditPosition 
The position in the file to start writing to. 

.Parameter NewBytes 
The array of new bytes to write, starting at $EditPosition 
#> 
param(
    $FileName, 
    $EditPosition, 
    [Byte[]]$NewBytes 
) 
$FileName = (Resolve-Path $FileName).Path 
if([System.IO.File]::Exists($FileName)) { 
    $File = $null 
    try { 
     $File = [System.IO.File]::Open($FileName, [System.IO.FileMode]::Open) 
     $File.Position = $EditPosition 
     $File.Write($NewBytes, 0, $NewBytes.Length) 
    } finally { 
     if($File -ne $null) { 
      try { 
       $File.Close() 
       $File = $null 
      } catch {} 
     } 
    } 
} else { 
    Write-Error "$Filename does not exist" 
} 

那麼你的例子是這樣工作的:

.\Edit-Hex.ps1 -FileName c:\temp\etc.exe -EditPosition 0x4a0 -NewBytes 00,00,0x40,0x3f 

請注意,必須將新值輸入爲逗號分隔列表以創建數組,並且默認情況下這些值將被解釋爲十進制數,因此您需要將其轉換爲十進制數或使用格式0x00來輸入十六進制數。

如果這對您不適用,那麼爲您提供HxD的命令行選項會很有幫助,以便我們可以幫助您構建適當的包裝。