Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Eseguire codice assembly
Forum - C# / VB.NET - Eseguire codice assembly

Avatar
NewAge (Normal User)
Pro


Messaggi: 153
Iscritto: 23/08/2009

Segnala al moderatore
Postato alle 13:47
Mercoledì, 02/12/2009
E' possibile eseguire all'interno di un programma .net del codice assembly?

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:58
Mercoledì, 02/12/2009
credo di no... .net è un framework basato su virtual machine. Però credo che tu possa creare il tuo codice in ASM con un compilatore esterno e poi eseguire questo programmino. Non sarà il massimo se cerchi l'ottimizzazione, ma non credo ci siano molte alternative...

Ad ogni modo qualcuno più esperto di me in ambito .Net potrebbe dare una risposta migliore...

Ciao


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:49
Mercoledì, 02/12/2009
Non puoi "compilarlo" nel programma finito, perchè IL è un linguaggio intermedio e non può contenere linguaggio macchina di una specifica architettura (altrimenti perderebbe l'astrazione).
Tuttavia, a runtime, puoi creare dinamicamente un puntatore a funzione, in cui tale puntatore punta a un blocco di memoria allocata dinamicamente in cui scrivi il codice macchina grezzo:
http://stackoverflow.com/questions/959087/is-it-possible-t ...


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:12
Mercoledì, 02/12/2009
Molto interessante come tecnica... si potrebbe quindi automatizzare il processo con opportuni script che compilano una funzione assembly, linkano l'objectfile senza header e con l'entrypoint direttamente sull'offset 0x00000000. Bisognerebbe anche stare attenti alla corretta calling convention... :)


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
NewAge (Normal User)
Pro


Messaggi: 153
Iscritto: 23/08/2009

Segnala al moderatore
Postato alle 18:57
Mercoledì, 02/12/2009
Correggimi se sbaglio:
Devo cambiare queste 2 varibili?
Codice sorgente - presumibilmente C#

  1. const uint PAGE_EXECUTE_READWRITE = 0x40;
  2.     const uint MEM_COMMIT = 0x1000;


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:32
Giovedì, 03/12/2009
Sono costanti e, no, non vanno modificate.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM Quote