Programación General > ASM (Ensamblador)

 duda punteros masm

(1/2) > >>

mdmfl:
buenas,

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


--- Código: C++ ---ReadFile(fichero,buffer,bytesporleer,&bytesleidos,0); 
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 ---invoke ReadFile,fichero,buffer,bytesporleer,addr bytesleidos,0 
addr coje la dirección de memoria del puntero (como & en C).

la pregunta es, no debería ser asi?

Eternal Idol:
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

mdmfl:
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:
No entiendo, tal vez si das un ejemplo logre comprender la diferencia que ves.

mdmfl:
o sea, en C, un ejemplo de readfile sería:


--- Código: C++ ---                //fichero, es el handle a createfile()        DWORD bytesporleer = GetFileSize(hFile,0);        LPSTR buffer = (LPSTR)HeapAlloc(hGetProcessHeap,HEAP_ZERO_MEMORY,bytesporleer);        DWORD lbytesleidos = 0;        ReadFile(fichero,Buffer,bytesporleer,&bytesleidos,0); 
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 ---            invoke GetFileSize,[hFile],0            mov [bytesporleer],eax            invoke HeapAlloc,[processheap],HEAP_ZERO_MEMORY,[bytesporleer]            mov [lpBuffer],eax            invoke ReadFile,[fichero],[lpBuffer],[bytesporleer],bytesleidos,0 
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?

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa