Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 1792
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

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 ...

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
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... :)

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.

PM Quote