Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: silver2050 en 19 Mayo 2013, 23:01 pm



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