Miércoles 20 de Noviembre de 2024, 18:38
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
duda punteros masm
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: duda punteros masm (Leído 2932 veces)
mdmfl
Nuevo Miembro
Mensajes: 5
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++
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?
Tweet
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
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
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:
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
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++
//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?
Eternal Idol
Moderador
Mensajes: 4696
Nacionalidad:
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
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:
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
push
dword
ptr
[
lpBuffer
]
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
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!
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
ASM (Ensamblador)
(Moderador:
Eternal Idol
) »
duda punteros masm