C'è un modo in Windows per modificare un file binario, dalla riga di comando? cioè un modo che potrebbe essere scritto in un file batch?È possibile modificare un file binario utilizzando la riga di comando di Windows?
Desidero essere in grado di modificare un singolo byte, in una posizione nota, in un file esistente.
Questa domanda esistente [1] è stata risolta, ma questa è una soluzione Linux. Sto cercando qualcosa di simile per Windows.
Sfondo
C'è un bug in GTA 1 quando scaricato da Steam per cui il file di dati save-game viene danneggiato in uscita. Di conseguenza, il gioco può essere giocato bene la prima volta ma successivamente si blocca. Risulta che questo può essere risolto cambiando il quinto byte nel file (cioè il byte all'indirizzo 0x04) da x00 a x06 [2].
posso fare questo in Python facilmente, per esempio:
with open("PLAYER_A.DAT", "rb") as f:
bytes = f.read()
bytes = bytes[:4] + '\x06' + bytes[5:]
with open("PLAYER_A.DAT", "wb") as g:
for b in bytes: g.write(b)
Idealmente se io preferirei fare questo in un processo batch che esegue le seguenti operazioni:
- correzioni di file di dati
- avvia GTA
Potrei creare qualcosa che funzioni per me (usando Python), ma ciò non aiutare casualmente altre persone che non hanno Python (sì, so che è facile installare &, ma ancora). Allo stesso modo, c'è un freeware disponibile che afferma di fare proprio questo, ma non voglio eseguire un .exe casuale sul mio PC, e non penso che nessun altro dovrebbe neanche. Per questo motivo, mi piacerebbe presentare un file batch, che le persone possano ispezionare e, se sono contenti di ciò che fa, gestiscono autonomamente.
Grazie per il vostro aiuto!
[1] CLI: Write byte at address (hexedit/modify binary from the command line)
[2] http://forums.steampowered.com/forums/showthread.php?t=1597746
[modifica] Corretto lo script Python, come ho scoperto che non ha funzionato così com'è (file.read() restituisce un oggetto immutabile , quindi non puoi semplicemente aggiornare uno dei valori).
Ma chi verifica che * * SPLITS.EXE non viene modificata? Potrebbe anche essere un exe casuale. – ComFreek
Come dice ComFreek, se fossi felice di eseguire un exe casuale, userei semplicemente GTALauncher.exe che corregge il file e avvia GTA :-) – sam
Beh, dato che non c'è modo di farlo in DOS (almeno, no modo che ho mai scoperto) dovrai spedire un programma di utilità helper con lo script, o semplicemente impacchettare la soluzione come .exe e spedirla. Suppongo che la differenza sia che se si spedisce un programma di utilità di terze parti liberamente disponibile insieme a uno script, esso può essere confrontato con la stessa utility da altre fonti (si spera che siano affidabili) mentre un pacchetto .exe personalizzato non può. –