Newsgroup: it.comp.lang.delphi
Titolo: Scrivere in un eseguibile

Esiste un modo pratico per scrivere delle informazioni in un eseguibile?

 
Nello stesso modo in cui scriveresti in un file binario. Il modo più 
semplice è assegnare il file a una variabile tipo 'File', aprirlo con 
lunghezza record unitaria, spostarti al punto desiderato con Seek, e 
scrivere un Write per ogni byte.
Ovviamente questo è un metodo rozzo, che può anche rovinare il file, se 
vuoi scrivere delle informazioni ben precise (ad esempio le informazioni 
sulla versione, il copyright ecc.) devi farci sapere esattamente cosa ti 
serve.
-- 
|-----------------------------------------------|
|Davide Guida          >>> 
davide...@email.it
|
|-----------------------------------------------|

 Esiste un modo pratico per scrivere delle informazioni in un eseguibile?
Il modo può dipendere dal tipo di informazioni che devi trattare.
In particolare, se l'eseguibile è il tuo e ne hai i sorgenti, potresti
valutare di salvare i dati che ti interessa modificare sotto forma di
risorse. In questo modo dovrebbe essere facile accedervi attraverso le API
di Windows. ...piu' o meno come si può fare utilizzando Resource WorkShop.
Diversamente, come già consigliato, l'unica soluzione è trattare
l'eseguibile come file binario.
Ciao,
Gianluca.
-- 
Gianluca Plevani
-----------------------------------------------------------
http://www.brain-enterprise.com

si, quella di scrivere in modo binario può andare, ma come faccio a
sapere l'offset da cui iniziare a scrivere? io devo solo inserire una
stringa lunga 12 caratteri, devo aprirlo in assembler?

 ha scritto nel messaggio
news:da443c53.04082...@posting.google.com...


 stringa lunga 12 caratteri, devo aprirlo in assembler?
Dipende cosa devi fare nel dettaglio e, soprattutto da come è stata
dichiara/valorizzata tale stringa all'interno dell'applicazione.
Prima di tutto: non ho capito se conosci il valore che la stringa ha
attualmente oppure non sai nemmeno dove si trova. Nel primo caso, la ricera
di una sequenza specifica di caratteri potrebbe aiutarti a trovarla e, dal
punto di inizio, potresti fare le modifiche che ti interessano. Se invece
nemmeno conosci l'attuale contenuto di tale stringa, immagino non ci sia
niente da fare (magari disassemblando in qualche modo... ma entriamo in
territori in cui non ho competenza con problematiche diverse, immagino,
anche in relazione al linguaggio utilizzato per sviluppare l'eseguibile su
cui devi lavorare).
Nella mia esperienza ho visto che
1. dichiando la stringa tipo:
const
  STRINGA = 'pippo';
oppure:
var
  str: string;
...
begin
  str := 'pippo';
...
è possibile risalire alla costante 'pippo' all'interno dell'eseguibile e
quindi variarne il contenuto
2. se invece:
var
  str: string;
...
begin
  str := 'p'; str := str + 'i'; str := str + 'p'; str := str + 'p'; str :=
str + 'o';
...
(o magari usando routines di concatenazione delle stringhe)
è praticamente impossibile riuscire a risalire ad una qualche costante
'pippo' all'interno dell'eseguibile e quindi andare a variarla.
Tutto questo naturalmente dando per scontato che tu sappia esattamente di
ricercare 'pippo'.
Diversamente il tuo problema è cercare una sequenza di 12 caratteri di cui
non conosci il valore senza sapere dove si trovano: la vedo molto molto
dura.


 ha scritto nel messaggio
news:da443c53.04082...@posting.google.com...
