|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
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
).esiste modo di far capire al compilatore che deve usare le variabili locali tramite ESP nelle funzioni naked? il problema si può risolvere per vie manuali, ma per comodità preferirei poter usare le variabili locali nelle funzioni naked. thx |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
vediamo se ho capito..
Codice:
__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
}
}
ps stai a fa un VxD? ciauz |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: May 2000
Messaggi: 1459
|
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)
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
![]() 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! 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 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:17.










).









