elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  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 3,788 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


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

1)He aquí la instrucción:

Código
  1. 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 pm por .:UND3R:. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
_Enko


Desconectado Desconectado

Mensajes: 538



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

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 pm por _Enko » En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


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

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


Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
_Enko


Desconectado Desconectado

Mensajes: 538



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

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
  1. jmp pword 0x08: .kernel ;usamos el primer selector
  2. .kernel:
  3.  
  4. ;o tambien
  5. jmp pword 0x1B: 1000h ;el selector que usa windows supongo
  6.  
  7. ;donde luego en la memoria en la direccion [CS: 1000h] esta el codigo
  8.  

Saludos

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

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


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

Me haz aclarado bastantes dudas, gracias _Enko

Saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
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 3,062 Último mensaje 12 Octubre 2007, 07:47 am
por Crazy.sx
Analizemos esta instrucción
PHP
SpiderNet 6 2,963 Último mensaje 17 Septiembre 2008, 02:59 am
por Rentero
Uso IE y esta instrucción $_SERVER[HTTP_USER_AGENT dice que uso Mozila
PHP
SpiderNet 3 4,127 Último mensaje 28 Septiembre 2008, 21:23 pm
por WHK
Esta tarjeta seria valida?
Materiales y equipos
Red raven 1 1,983 Último mensaje 18 Octubre 2008, 01:57 am
por barredera
Por que esta instrucción (FPU) genera una excepción.
ASM
.:UND3R:. 5 4,008 Último mensaje 25 Julio 2012, 04:20 am
por _Enko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines