Intruccion fcmovbe - Orientacion - FPU

Iniciado por AlbertoBSD, 17 Febrero 2010, 06:28 AM

0 Miembros y 1 Visitante están viendo este tema.

AlbertoBSD

Bueno, estoy haciendo una investigación, sobre algunas instrucciones poco usuales de ASM, esto es para el análisis de un shellcode sacado con Metasploit, bueno no encuentro buenas referencias sobre la instrucción: fcmovbe

La tengo así en depurador, es AT&T

Código (asm) [Seleccionar]
fcmovbe %st(0),%st

el original de Intel es:
Código (asm) [Seleccionar]
fcmovbe %st,%st(0)

;-) Muchos tienen problemas par distinguir uno de otro pero bueno, eso no es el tema

He dado con esto:

CitarConditional move if below or equal
http://www.asmpedia.org/index.php?title=FCMOVBE

Y con algunos manuales de Intel, pero tienen entre 200 y 500 hojas y pfff de aqui a que leo todo para entenderlo, tengo una ligera idea, pero necesito que alguien me pueda confirmar, st es alguna especie de registro, cual es su proposito general.

Yo entiendo esto:
CitarSi st(0) es memor o igual que st, entonces mueve st(0) a st
:xD no Entiendo.

Alguna buena referencia entendible.

Saludos y gracias
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Eternal Idol

#1
http://en.wikipedia.org/wiki/X87

ST es un pila de 8 registros, de ST(0) a ST(7).


Aca tenes una explicacion mejor me parece:
http://www.rcollins.org/p6/opcodes/FCMOV.html

Y si, no parece ser un opcode muy util el que tenes, por lo que entendi FCMOV siempre que mueve algo lo hace en ST(0) (si usas ST[n] no es un opcode valido por lo que pude ver) asi que indicarle el otro parametro como ST(0) no cambiara nada ... ¿Seguro que es el codigo correcto?
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

AlbertoBSD

Si tengo el código correcto, es que el mestasploit hace cosas raras :xD en especifico al momento de genera opcodes con msfpayload, en general prefiero crear mis propias shellcodes, sin embargo me pareció interesante analizar una creada por el msf ya que muchos lo usan sin saber que es lo que les arroja verdaderamente

Aqui lo genere:


Y lo estoy analizando aqui:



Se ve que el los opcodes son "\xda\xd0"

y hago un poco de depuración con gdb



Aqui pues las direcciones de stack y otras son las que usa FreeBSD, pero es para darme una idea de lo que hace en general.

Gracias por las referencias, las mirare en un rato mas.

Saludos


Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

karmany

He hecho unas cuantas pruebas con IDA de punto flotante con la instrucción:

DA D0  fcmovbe ST(0), ST(0)

Y no le veo lógica ya que el resultado tampoco lo comprendo. Es como hacer:
mov eax, eax siempre sale lo mismo(o eso parece).

Si fuera fcmovbe ST(0), ST(1) pero fcmovbe ST(0), ST(0) no le veo sentido.

Sin embargo, en alguna situación ST(0) ha sido modificado. No lo entiendo muy bien, seguiré buscando info. Si alguien consigue descifrarlo que lo postee.