elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Devolver puntero a cadena en función
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Devolver puntero a cadena en función  (Leído 3,038 veces)
silver2050

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Devolver puntero a cadena en función
« 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.               


« Última modificación: 19 Mayo 2013, 23:07 pm por silver2050 » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Devolver puntero a cadena en función
« Respuesta #1 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 )








En línea

silver2050

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Devolver puntero a cadena en función
« Respuesta #2 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
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
devolver valor de uan funcion
Programación C/C++
mapers 1 2,749 Último mensaje 15 Noviembre 2010, 05:14 am
por Mr.Blue
Cadena estatica al devolver puntero de cadena.
Programación C/C++
alem29 2 3,527 Último mensaje 5 Febrero 2012, 23:38 pm
por eleon
Como devolver puntero con cadena vacia
Programación C/C++
Destro- 6 3,861 Último mensaje 17 Marzo 2014, 22:30 pm
por Eternal Idol
Devolver cadena con función
Programación C/C++
Kaxperday 7 3,479 Último mensaje 6 Agosto 2014, 05:55 am
por leosansan
Devolver una cadena pasada como argumento a una funcion
Programación C/C++
eduu15 4 3,447 Último mensaje 9 Abril 2018, 03:18 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines