elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
25 Mayo 2012, 02:18  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Por que esta instrucción no es válida?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Por que esta instrucción no es válida?  (Leído 705 veces)
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Por que esta instrucción no es válida?
« en: 18 Noviembre 2011, 17:46 »

1)He aquí la instrucción:

Código
mov ds, 1000h


2)Otra cosa, un programa en modo protegido mov puede tener como destino registros de segmento exceptuando a CS?

Saludos

EDIT:

3) movzx var2,al    ; es válida??? var2 WORD 1000h (yo creo que sí)




« Última modificación: 18 Noviembre 2011, 18:03 por .:UND3R:. » En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Por que esta instrucción no es válida?
« Respuesta #1 en: 19 Noviembre 2011, 13:32 »

esa seria la forma correcta de hacerlo en modo real.
Código:
mov al, 1000h
mov ds, al



3) NO
Código:
0F B6 / r MOVZX r16, r/m8 Move byte to word with zero-extension
0F B6 / r MOVZX r32, r/m8 Move byte to doubleword, zero-extension
0F B7 / r MOVZX r32, r/m16 Move word to doubleword, zero-extension
el destino tiene que ser un registro.

saludos.


« Última modificación: 20 Noviembre 2011, 15:56 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Por que esta instrucción no es válida?
« Respuesta #2 en: 20 Noviembre 2011, 15:40 »

Hola, en cuando a la pregunta dos, me refería a mov no ha movxz jeje


Saludos
En línea

_Enko


Desconectado Desconectado

Mensajes: 300



Ver Perfil
Re: Por que esta instrucción no es válida?
« Respuesta #3 en: 20 Noviembre 2011, 16:24 »

Mi respuesta era a la pregunta 1 y 3. La 2 no la vi.

2) Sacado de AMD_INSTRUCTION_SET
Citar
Copies an immediate value or the value in a general-purpose register, segment register, or memory
location (second operand) to a general-purpose register, segment register, or memory location. The
source and destination must be the same size (byte, word, doubleword, or quadword) and cannot both
be memory locations
Citar
When reading segment-registers with a 32-bit operand size, the processor zero-extends the 16-bit
selector results to 32 bits. When reading segment-registers with a 64-bit operand size, the processor
zero-extends the 16-bit selector to 64 bits. If the destination operand specifies a segment register (DS,
ES, FS, GS, or SS), the source operand must be a valid segment selector
Citar
Attempting to use the MOV instruction to load the CS register generates an invalid opcode exception
(#UD). Use the far JMP, CALL, or RET instructions to load the CS registe



Como destino se puede tener DS, FS, GS, SS  y ES (en modo KERNEL, RING0. Si lo haces en modo usuario, el programa muere)

Para modificar CS, lo que se hace es un far jump.
Me imagino que habras visto varias veces algo asi:
Código:
mov eax, [fs:0x0]
mov eax, [fs:0x20] etc..
FS en realidad no guarda una direccion de memoria en modo protegido, ni tampoco CS, DS, ES, GS etc...
Lo que guardan es un Indice a una tabla. Y en esa tabla si se guarda la direccion. (gdt). Se los suele llamar "selectores" en vez de "segmento" ya que son eso, un indicde selector. CodeSelector, DataSelector etc...

Para modificar el CS lo que hay que hacer es un far jump indicando que "indice"/selector de esa tabla hay que usar.
Código
jmp	pword 0x08: .kernel ;usamos el primer selector
.kernel:
 
;o tambien
jmp pword 0x1B: 1000h ;el selector que usa windows supongo
 
;donde luego en la memoria en la direccion [CS: 1000h] esta el codigo
 

Saludos

« Última modificación: 20 Noviembre 2011, 16:29 por _Enko » En línea


Servicio tecnico Blackberry http://www.serviciotecnicocelular.com
.:UND3R:.


Desconectado Desconectado

Mensajes: 1.960


Ingeniería inversa


Ver Perfil WWW
Re: Por que esta instrucción no es válida?
« Respuesta #4 en: 21 Noviembre 2011, 04:18 »

Me haz aclarado bastantes dudas, gracias _Enko

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Cómo sería esta instrucción en Batch?
Scripting
ramonecaxa 3 858 Último mensaje 12 Octubre 2007, 07:47
por {Lukhardy}
¿Esta Ip es valida? ¿O imposible?
Redes
Kami 7 882 Último mensaje 14 Junio 2008, 22:38
por Kami
Analizemos esta instrucción
PHP
SpiderNet 6 953 Último mensaje 17 Septiembre 2008, 02:59
por Rentero
Esta tarjeta seria valida?
Materiales y equipos
Red raven 1 748 Último mensaje 18 Octubre 2008, 01:57
por barredera
Es valida esta tarjeta para AIRCRACK?
Hacking Wireless
arrebato21 1 630 Último mensaje 21 Marzo 2009, 21:30
por ovni00
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines