Título: Devolver puntero a cadena en función Publicado por: silver2050 en 19 Mayo 2013, 23:01 pm Buenas, a ver si podéis echarme una mano.
Tengo un problema con el ASM, estoy intentando recuperar el valor devuelto por una función, siendo este un puntero a char y me da un error, creo que estoy intentando acceder a una zona de memoria inválida: En LeeValor quiero devolver un 0 pero ha de ser con el char * :o void main (void) { printf("\nEl valor es: %s\n", LeeValor (10)); }; char * LeeValor (int NroBit) { char *res = "0"; __asm{ ; 1ª parte: ; Salvamos los registros seguros push edi mov eax, dword ptr [ebp-4] ;en [ebp-4] tengo la vble local (res) ; he probado de esta forma pero no he tenido éxito tampoco ;mov byte ptr [eax], '0' ;mov byte ptr [eax+1], 0 } } Saludos y gracias. Título: Re: Devolver puntero a cadena en función Publicado por: x64core en 20 Mayo 2013, 02:21 am Buenas, a ver si podéis echarme una mano. Tengo un problema con el ASM, estoy intentando recuperar el valor devuelto por una función, siendo este un puntero a char y me da un error, creo que estoy intentando acceder a una zona de memoria inválida: En LeeValor quiero devolver un 0 pero ha de ser con el char * :o void main (void) { printf("\nEl valor es: %s\n", LeeValor (10)); }; char * LeeValor (int NroBit) { char *res = "0"; __asm{ ; 1ª parte: ; Salvamos los registros seguros push edi mov eax, dword ptr [ebp-4] ;en [ebp-4] tengo la vble local (res) ; he probado de esta forma pero no he tenido éxito tampoco ;mov byte ptr [eax], '0' ;mov byte ptr [eax+1], 0 } } Saludos y gracias. jamas tomar en cuenta y no recomendable que el compilador hara stack frame, puede que el compilador no haga stack frame para optimizar el codigo. Creo que lo quieres es simplemente debes hacer referencia en la declaración asm a la variable local: mov eax,res pero al final si lo que quieres es retornar ese puntero siempre debes hacerlo mediante sintaxis C++, no lo hagas directamente desde asm inline, a menos que uses funciones declaradas como __naked ( VC ) Título: Re: Devolver puntero a cadena en función Publicado por: silver2050 en 22 Mayo 2013, 00:31 am Gracias compañero.
Me temo que he de hacerlo con asm. Le echaré un ojo a la creación del stackframe pero parecía correcta, salvo que guardaba algunos registros en la pila que no sé para qué, pero el resto lo hace correcto, utilizo Visual Studio 2008. Bueno a ver si hay suerte. Un saludo |