Autor
|
Tema: Ayuda con fadd qword ptr [xxxxxx] (Leído 7,683 veces)
|
Mad Antrax
|
Buenas a todos
A ver, no estoy acostumbrado a trabajar con ASM y tengo una duda que no puedo resolver xD
Estoy trabajando con una variable de tiplo single (float) y he llegado a la instrucción que modifica dicha variable:
fadd qword ptr [Project1.exe+10A0] fstp dword ptr [esi+34]
La primera instrucción me añade (fadd) el valor de Project1.exe+10A0 (que tiene un valor de 0.25). Luego la segunda instrucción almacena el valor en la variable esi+34 ¿lo digo bien? Bueno, pues yo quiero aumentar 0.75 en lugar de 0.25, he probado lo siguiente:
fadd qword ptr [0.75] = Ya se que eso no funciona, pero tenía que probarlo fadd qword ptr 0.75 = Tampoco funciona mov [esi+34],0.75 = Tampoco funciona
Como podéis observar, lo estoy haciendo fatal, jaja. Cual es la instrucción que me permite añadir el valor que yo quiera a mi variable de tiplo Single (float)?
Saludos y gracias
|
|
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Para cargar valores en el registro tienes que usar la instruccion fld, si te fijas tienes instrucciones como fld1, fldz. No se si te refieres a eso. Un saludo. Edito: Si tienes 0.25 en el registro, 0x3e800000, i quieres que tenga el valor de 0.75, puedes cargarlo como te dijo con fld o sumarle con fadd. pushq $0x3f000000 ; 0.50 fadd (%rsp) fst (%rsp)
Ahora tendrias 0x3f400000, 0.75 cargado en la pila. Tambien con fld. fldz ; registro a zero pushq $0x3f400000 fld (%rsp)
Ya tendrias 0.75 cargado.
|
|
« Última modificación: 1 Diciembre 2013, 21:26 pm por cpu2 »
|
En línea
|
|
|
|
Mad Antrax
|
Gracias por responder, me ha servido tu explicación de fldz para poner el registro a zero.
Ahora lo que he conseguido es nopear la instrucción fadd y he hecho lo siguiente:
mov [esi+34],3F800000
Con eso, establezco el valor de la variable a 1 (que también me interesa hacerlo).
Ahora solo quiero aprender como funcionan los números decimales en ASM. No entiendo porque 1 = 3F800000 y el 2 = 40000000
Hay alguna tabla que me permita calcular el valor hexadecimal de un número decimal (float)?
|
|
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Gracias por responder, me ha servido tu explicación de fldz para poner el registro a zero.
Ahora lo que he conseguido es nopear la instrucción fadd y he hecho lo siguiente:
mov [esi+34],3F800000
Con eso, establezco el valor de la variable a 1 (que también me interesa hacerlo).
De nada, pero que quieres hacer? No es mejor utilizar fld1? para que utilizas la pila. Utiliza los registros st, no la pila, estara mucho mejor, si me dices que estas haciendo, te dejo un ejemplo. Ahora solo quiero aprender como funcionan los números decimales en ASM. No entiendo porque 1 = 3F800000 y el 2 = 40000000
Hay alguna tabla que me permita calcular el valor hexadecimal de un número decimal (float)?
En alguna parte lei la explicacion de todo esto, pero ya no tengo el documento.... Pero de momento puedes ayudarte con un conversor de numeros decimales a hex. Un saludo. P.D: Haz lo que pretendas a tu manera, y yo intentare mejorarlo, si quieres.
|
|
|
En línea
|
|
|
|
Mad Antrax
|
Estoy haciendo trainers para un videojuego (cheats, trucos, etc), utilizo CheatEngine + inyección de codigo.
La variable que pretendo modificar es de tipo Float (hay otras Double, pero es casi lo mismo). El código original resta 0.25 en cada ejecición y yo quiero que se almacene el valor 100 en lugar de restar, es decir:
A = A - 0.25 (éste el el código original)
Y lo que quiero hacer yo es:
A = A - 0.25 A = 100 (Añadir ésta línea para que mi variable tenga el valor de 100 todo el rato)
|
|
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Vale, ahora entiendo porque utilizas la pila, pensaba que era para hacer algun tipo de calculo matematico, por eso te dije los de los registros. Porque es mejor hacer esto: fld1
Que no esto: movl 0x3f800000, 34(%esi) fld 34(%esi)
Pero para lo que pretendes creo que bastaria moviendo o sumando con fadd 0x42c80000 100.0, a la variable, si tienes alguna duda ya sabes. Un saludo.
|
|
« Última modificación: 1 Diciembre 2013, 23:04 pm por cpu2 »
|
En línea
|
|
|
|
Mad Antrax
|
Duda ninguna, me lo has explicado todo perfecto. Solo falta entender como coño funcionan los numeros decimales en asm (hexadecimal), por mas que lo smiro, no les veo ninguna lógica o relación xD Los numeros enteros y los negativos si que los entendí, pero los decimales..... es dificil ver que 0x42c80000 es 100 xD edit, me ha ayudado mucho éste anexo: http://es.wikipedia.org/wiki/Anexo:Listados_de_instrucciones_x86
|
|
« Última modificación: 1 Diciembre 2013, 23:16 pm por ||MadAntrax|| »
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
El estandar es el IEEE 754, pero ya no tengo la documentacion. Por cierto, aplicaste lo que te dije al trainer y funciona?
Un saludo.
Edito:
Los manuales de intel estan mejor que la wikipedia xD.
|
|
|
En línea
|
|
|
|
Mad Antrax
|
El estandar es el IEEE 754, pero ya no tengo la documentacion. Por cierto, aplicaste lo que te dije al trainer y funciona?
Un saludo.
Lo he puesto a mi manera: fstp dword ptr [esi+34] mov [esi+34],42C80000 fnstsw ax
Así, al ejecutar la instrucción, la variable esi+34 siempre tendrá valor 100.0
|
|
« Última modificación: 1 Diciembre 2013, 23:23 pm por ||MadAntrax|| »
|
En línea
|
No hago hacks/cheats para juegos Online. Tampoco ayudo a nadie a realizar hacks/cheats para juegos Online.
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Bien, copias el valor del registro st(0) a la pila, y luego dejas st(0) a su valor anterior, pero no entiendo el mov, porque mueves el valor del registro st(0) y luego reescribes el valor de la pila con el mov?
No es mejor hacer el mov directamente.
Y sobre fnstsw, luego comparas el valor para saber como esta el estado?
Un saludo.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda por davor ayuda os ruego ayuda XD (SOLUCIONADO)
Hardware
|
XxRekcahlExX
|
6
|
11,169
|
24 Mayo 2010, 00:56 am
por Aprendiz-Oscuro
|
|
|
asociar con los nuevos Xavi E0:91:53:xxxxxx
Wireless en Linux
|
vespertine
|
3
|
5,857
|
19 Diciembre 2010, 01:16 am
por vespertine
|
|
|
Auditoria de redes FTE-XXXX Y ORANGE-XXXXXX
Wireless en Linux
|
albertone93
|
3
|
15,450
|
12 Febrero 2012, 17:50 pm
por HCK.
|
|
|
RouterOS v6.2 Final y las nuevas redes Mikrotik-XXXXXX
Hacking Wireless
|
P4nd3m0n1um
|
0
|
5,950
|
5 Agosto 2013, 04:40 am
por P4nd3m0n1um
|
|
|
Redes TELECABLE-XXXXXX
Hacking Wireless
|
magarcan
|
0
|
3,619
|
18 Agosto 2014, 10:15 am
por magarcan
|
|