• Miércoles 20 de Noviembre de 2024, 18:38

Autor Tema:  duda punteros masm  (Leído 2932 veces)

mdmfl

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
duda punteros masm
« en: Domingo 18 de Julio de 2010, 13:59 »
0
buenas,

mi duda en los punteros surge del siguiente motivo (codigo en C):

Código: C++
  1. ReadFile(fichero,buffer,bytesporleer,&bytesleidos,0);
  2.  

como indica en la MSDN, el 4 parametro debe ser un puntero a la variable que recibe los bytes leidos y, debemos poner el operador & (la memoria de un puntero). ahora bien, si lo hago en masm, EN TEORIA, no debe ser así???

Código: ASM
  1. invoke ReadFile,fichero,buffer,bytesporleer,addr bytesleidos,0
  2.  

addr coje la dirección de memoria del puntero (como & en C).

la pregunta es, no debería ser asi?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda punteros masm
« Respuesta #1 en: Martes 20 de Julio de 2010, 10:45 »
0
Al no ver tu codigo estoy adivinando pero me imagino que tenes que usar offset en lugar de addr si bytesleidos es un dato del segmento data.

.data
bytesleidos dd 0


Mas info:
http://www.hitxp.com/comp/pro/asm/120403.htm

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

mdmfl

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: duda punteros masm
« Respuesta #2 en: Martes 20 de Julio de 2010, 19:18 »
0
sí, la variable es así... pero no es lo que pregunto. lo que digo es q en C se cuando poner el operador & (para la direccion d memoria), pero en masm veo que ponen la dirección de memoria en otros parámetros que en C no se pondría....

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda punteros masm
« Respuesta #3 en: Miércoles 21 de Julio de 2010, 11:45 »
0
No entiendo, tal vez si das un ejemplo logre comprender la diferencia que ves.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

mdmfl

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: duda punteros masm
« Respuesta #4 en: Miércoles 21 de Julio de 2010, 20:10 »
0
o sea, en C, un ejemplo de readfile sería:

Código: C++
  1.                 //fichero, es el handle a createfile()
  2.         DWORD bytesporleer = GetFileSize(hFile,0);
  3.         LPSTR buffer = (LPSTR)HeapAlloc(hGetProcessHeap,HEAP_ZERO_MEMORY,bytesporleer);
  4.         DWORD lbytesleidos = 0;
  5.         ReadFile(fichero,Buffer,bytesporleer,&bytesleidos,0);
  6.  

teniendo en cuenta esto, hice esto en fasm (xD me cambié a fasm jaja)(las variables ya las tengo declaradas en la sección .data...):

Código: ASM
  1.             invoke GetFileSize,[hFile],0
  2.             mov [bytesporleer],eax
  3.             invoke HeapAlloc,[processheap],HEAP_ZERO_MEMORY,[bytesporleer]
  4.             mov [lpBuffer],eax
  5.             invoke ReadFile,[fichero],[lpBuffer],[bytesporleer],bytesleidos,0
  6.  

lo traducí así de C... como ves, en bytesleidos (en el de asm) no tengo puesto entre [], porque se debe de pasar la dirección de memoria, no? traducido así, en teoría debe estar bien, pero ahora viene mi duda: vi algunos codigos, q dejaban la variable buffer sin [] pq se le tenia q pasar la dirección de memoria. pero en c no se hace...

entonces, que hago?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda punteros masm
« Respuesta #5 en: Jueves 22 de Julio de 2010, 01:50 »
0
El codigo original estaba bien, los corchetes no se usan para pasar la direccion de memoria, como te dije antes para eso se usa offset o addr, los corchetes se usan para tomar el valor y en este caso no hacen falta.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

mdmfl

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: duda punteros masm
« Respuesta #6 en: Jueves 22 de Julio de 2010, 19:10 »
0
ya sé q los corchetes se usan para pasar tomar el valor, pero vi en algún ejemplo que no ponían la corcheta en el buffer...

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: duda punteros masm
« Respuesta #7 en: Jueves 22 de Julio de 2010, 23:59 »
0
Si, no hace falta como ya te habia dicho antes, si no los pones igual el ensamblador genera este codigo:

Código: ASM
  1. push dword ptr [lpBuffer]
  2.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

mdmfl

  • Nuevo Miembro
  • *
  • Mensajes: 5
    • Ver Perfil
Re: duda punteros masm
« Respuesta #8 en: Viernes 23 de Julio de 2010, 11:35 »
0
conclusión, es mejor poner los corchetes a buffer. muchas gracias Eternal!