VB [SORGENTE] Eseguire un exe direttamente in memoria

Non creare un nuovo processo .-.
Non si può creare un Thread che sia un applicazione?
Intendo:
Io apro un applicazione che esegue per esempio il solitario, ma in un altro thread sempre nel processo del 1 programa
 
Il programma X legge i bytes di un eseguibile Y, crea un thread Z indipendente e nel Thread Z viene eseguito l'eseguibile Y sempre xò nel processo del programma X
 
Il programma X legge i bytes di un eseguibile Y, crea un thread Z indipendente e nel Thread Z viene eseguito l'eseguibile Y sempre xò nel processo del programma X
uahuaauh allora non ero io che non riuscivo a capire, intanto il sorgente fa molto molto molto di piu'!!!
Sopratutto perchè quanto hai appena descritto non ha nessun senso.
Rivediamolo: un programma X legge un eseguibile Y e crea un thread Z indipendente? come puo' un thread essere indipendente? allora è un processo e non un thread? e nel thread Z (che non puo' esistere per il motivo appena detto), non puo' essere eseguito nulla perchè cerchi di eseguire Y che è un byte array di un eseguibile estraneo nel processo del programma X che non ha nulla a che spartire con Z.
Sei riuscito a generare un apocalisse tra i processi xD

quello che fa:
analizza la struttura dal PE stesso
mette in un byte array il contenuto dell'exe che vogliamo runnare a runtime.
verifica le signature PE e MZ
Crea un processo sospeso su s'è stesso
modifica i context,
rimappa l'eseguibile in memoria per fare eventualmente spazio necessario
sistema address e header
riscrive il processo su s'è stesso
sistema immagine e context
rilascia il processo figlio
chiude il processo padre che ormai è inutile.

Nessun thread secondario

... che poi è spiegato benissimo nel 1° topic
 
Ultima modifica:
Quindi non è possibile come dico io?
P.S. hia più di 1000 msg!
piu' che altro non ha senso. è come dire quanti litri misura un metro? Percio' se magari mi spieghi nel modo giusto cosa vorresti che fa il sorgente piu' di quello che fa adesso...

ps: wow non me ne ero accorto :D
 
Il sorgente ora è ottimo, solo che si è obbligati a aprire un altro processo...
Non penso sia possibile eseguire un processo in un thread..
 
Ultima modifica:
Il sorgente ora è ottimo, solo che si è obbligati a aprire un altro processo...
Non penso sia possibile eseguire un processo in un thread..
il processo viene automaticamente sovrascritto dal nuovo pe, non capisco la tua domanda
dire aprire un processo in un thread è una cosa che non ha senso perchè il thread è figlio di un processo e non possiede nessuna struttura del pe,
è come dire che tuo padre è nato da te, o che vuoi fare auto alla benzina, o che vuoi chiamare con la batteria del cellulare. mi son spiegato?
immagina un thread come un ciclo
do
istruzioni
loop
è un ramo del processo.

precisato questo, qual'è la domanda? :)
 
Ahh Ho capito!
E' impossibile esegire un programma in un thread, ma non c'è un modo per leggere tutte le azioni di un programma e eseguirle in un thread?
 
Ultima modifica:
Ahh Ho capito!
E' impossibile esegire un programma in un thread, ma non c'è un modo per leggere tutte le azioni di un programma e eseguirle in un thread?
Leggere tutte le azioni di un programma, eeehhh??????????????
un processo ha già almeno un thread. Non riesco a capire il senso di quello che dici :-(
 
scusate se mi intrometto nella discussione ma non lo capito manco io :asd:
xD prima ce il processo giusto? poi ce il thread? xD

Prima c'è il processo poi c'è il thread?!? LOL ma che significa? :asd:
Via diamo una spiegazione tecnica definitiva :D

Un processo è un'entità che viene creata dal sistema operativo e gestito dal kernel e che, oltre a contenere il codice da eseguire, contiene anche tutte le informazioni che ne definiscono lo stato. Un thread è una parte del processo che viene eseguita indipendentemente dallo stato del resto del processo. Si può vedere quindi un processo come un insieme di thread. Ogni processo possiede almeno un thread (se stesso), ma può averne più di uno che fanno sempre parte del processo (quindi non sono uno a parte) ma lavorano indipendentemente dagli altri thread. Anche il tempo di esecuzione di un thread è indipendente dal tempo di esecuzione degli altri. Un thread può essere eseguito insieme ad un altro o dopo un altro o quando un altro è già iniziato ma non ancora terminato.

Non è possibile eseguire un processo all'interno di un thread (come chiedeva error) per il fatto (detto in modo semplice) che un thread è un'entità "più piccola" di un processo che quindi non possiede una struttura adatta a tenere un intero processo. è come mettere un elefante dentro un frigorifero. è inutile, non puoi! un elefante è più grosso del frigorifero e quest'ultimo non può contenerlo.
 
Ultima modifica:
certamente, il thread è un "sottoprodotto" del processo
padre e figlio
pianta e frutto
dai la cera togli la cera ehmmm no questa no

preciso a quello che dice SpeedJack che il motivo per cui un processo non "puo' stare" dentro un thread non è solo quesione di spazio, ma proprio di struttura logica e tecnica. Perchè detta cosi' io potrei avere un frigorifero abbastanza grande da far stare un elefante.
 
  • Mi piace
Reazioni: Freeman
preciso a quello che dice SpeedJack che il motivo per cui un processo non "puo' stare" dentro un thread non è solo quesione di spazio, ma proprio di struttura logica e tecnica. Perchè detta cosi' io potrei avere un frigorifero abbastanza grande da far stare un elefante.

Già ho dato un esempio che non era proprio preciso. Era per non dover andare a parlare della struttura del PE. Sia perché complicherei solo la definizione di processo e thread, sia perché la struttura del PE non l'ho ancora studiata così bene da porterla esporre :)
Per renderla semplice ecco un esempio più significativo dell'elefante anche se poco credibile:
è come mettere una televisione dentro una radio :asd:
una radio è in grado di trasmettere solo audio, non video. Quindi non potete costringere la radio a trasmettere anche immagini.
 
Ho il sospetto che questo sia il RunPe di affixiate portato in visual basic.
Il suo non funzionava su sistemi operativi a 64 bit ed in effetti su seven x64 pippo.exe non parte.