View Full Version : codice di prologo ed epilogo
salve a tutti, vi presento il mio problema: in VC6 implementando una funzione con __declspec(naked) non viene generato il codice di prologo ed epilogo nelle funzioni, quindi non viene creato lo stack frame; il problema è che il compilatore quando deve accedere alle variabili locali e ai parametri usa sempre EBP, di conseguenza non mi permette di usare variabili locali nelle funzioni naked (ai parametri però ci accede lo stesso usando ESP :mbe: ).
esiste modo di far capire al compilatore che deve usare le variabili locali tramite ESP nelle funzioni naked? :cry:
il problema si può risolvere per vie manuali, ma per comodità preferirei poter usare le variabili locali nelle funzioni naked. thx
The3DProgrammer
24-10-2005, 00:17
vediamo se ho capito..
__declspec ( naked ) main()
{
int i;
int j;
__asm /* prolog */
{
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
}
/* Function body */
__asm /* epilog */
{
mov esp, ebp
pop ebp
ret
}
}
cioè tu vorresti evitare di scrivere ogni volta manualmente prologo ed epilogo?
ps stai a fa un VxD?;)
ciauz
The3DProgrammer
24-10-2005, 00:44
cmq se ho capito bene secondo me nn puoi, in quanto nel prologo devi allocare anche lo spazio per le variabili locali (tramite _LOCAL_SIZE)
vediamo se ho capito..
__declspec ( naked ) main()
{
int i;
int j;
__asm /* prolog */
{
push ebp
mov ebp, esp
sub esp, __LOCAL_SIZE
}
/* Function body */
__asm /* epilog */
{
mov esp, ebp
pop ebp
ret
}
}
cioè tu vorresti evitare di scrivere ogni volta manualmente prologo ed epilogo?
ps stai a fa un VxD?;) veramente no, il codice di prologo ed epilogo non è che lo devo scrivere manualmente, lo devo proprio togliere! però in effetti ora che mi ci fai pensare le variabili locali non sempre vengono allocate con un push sul momento, molte vengono allorate col sub all'inizio... :doh:
il problema è il seguente: cerco semplicemente di far scomparire le mie funzioni dal call stack, e per farlo devo semplicemente evitare di usare ebp per creare e distruggere gli stack frames; quello che vorrei è che il compilatore usasse esp anziché ebp per accedere alle variabili locali e ai parametri, però ovviamente non lo fa! :cry: inoltre cè anche il problema del sub iniziale, che dovrei fare manualmente, ma così il compilatore non può allocare variabili locali perché non può sapere se io ho fatto il sub oppure no, e se l'ho fatto per le variabili locali anziché per qualcos'altro.
la soluzione manuale sarebbe di non usare variabili locali, ma solo globali, e di usare funzioni naked... come soluzione non mi piace per niente...
ps: no, non è un vxd quello che sto facendo: è il mio solito virus :D vado a perfezionamenti: ogni volta lo miglioro aggiungendoci qualche caratteristica ;)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.