Autor
|
Tema: Problemas al instalar masm32 (Leído 10,522 veces)
|
xv0
Desconectado
Mensajes: 1.027
|
Si claro, me explique mal, yo te entendi de que no se podia poner instrucciones en 16 bits, se utiliza el prefijo 66 con los 16 bits, no son los opcodes originales de 80x86, es como un x86 pero con el prefijo, pense de que Windows x64 no toleraba ese tipo de cosas, me extrañaba por eso pregunte.
Un saludo.
|
|
|
En línea
|
|
|
|
luisferfago
Desconectado
Mensajes: 15
|
El S.O. no cambia a modo real una vez iniciado asi que el procesador no ejecuta instrucciones de 16 bits. No se para que uno lo podria querer igualmente mov ax, 1234h xor bx, ax ... ¿Así que estas instrucciones de 16 bits no se ejecutan en el procesador (de 32, de 64)? Vaya, vaya, ... no me digas. Por poner un ejemplo: Windows Home 64 bits con procesador Intel 64 bits: Depura el Notepad.exe (un ejecutable de 64 bits) y poco muy poco, pero verás algunas intrucciones, como esta: xor al, al ret
|
|
« Última modificación: 25 Mayo 2015, 18:02 pm por luisferfago »
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
mov ax, 1234h xor bx, ax ...
¿Así que estas instrucciones de 16 bits no se ejecutan en el procesador (de 32, de 64)? Vaya, vaya, ... no me digas.
Hola, creo que es como C y C++, algunas instrucciones de C se ejecutan en C++
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
mov ax, 1234h xor bx, ax ...
¿Así que estas instrucciones de 16 bits no se ejecutan en el procesador (de 32, de 64)? Vaya, vaya, ... no me digas.
Por poner un ejemplo: Windows Home 64 bits con procesador Intel 64 bits: Depura el Notepad.exe (un ejecutable de 64 bits) y poco muy poco, pero verás algunas intrucciones, como esta:
xor al, al ret ¿Queres decir que esas instrucciones que trabajan con registros de 16 u 8 bits son de 16 bits? Las instrucciones dependen del modo de ejecucion. Abro el WinDbg de 32 bits y el notepad idem. !dh notepad eb notepad+address of entry point 0x1f g Repetir con el WinDbg de 64 bits y notepad idem. Edito con otro ejemplo el opcode 048h en 16 bits es DEC AX, en 32 bits DEC EAX (como decia el amigo cpu2 si queres hacer DEC AX le antepones el operand-size prefix 066h) y en 64 bits es invalido.
|
|
« Última modificación: 25 Mayo 2015, 20:33 pm por Eternal Idol »
|
En línea
|
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
|
|
|
luisferfago
Desconectado
Mensajes: 15
|
sí: quiero decir exactamente eso: que esas instrucciones son de 16 bits en toda regla. otra cosa es que el procesador no conmute a modo real para ejecutarlas, claro. pero no digas que esas instrucciones no son de 16 bits porque están operando con registros de 16 bits. ¿el prefijo 66h es invalido en 64 bits? te vuelvo a decir: ¿no me digas? foto: notepad.exe de 64 bits, depurado con el WinDbg, en Windows Home 64 bits con procesador Intel 64 bits: http://postimg.org/image/p3o3xva3j/
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
sí: quiero decir exactamente eso: que esas instrucciones son de 16 bits en toda regla. El S.O. no cambia a modo real una vez iniciado asi que el procesador no ejecuta instrucciones de 16 bits. No se para que uno lo podria querer igualmente Bien, el procesador en modo long no es capaz de ejecutar el DEC E/AX (opcode 048h) o POP DS (opcode 0x1F). Por lo tanto el procesador en modo long ejecuta instrucciones de 64 bits (si, aunque sea capaz de acceder a los registros legacy). otra cosa es que el procesador no conmute a modo real para ejecutarlas, claro. pero no digas que esas instrucciones no son de 16 bits porque están operando con registros de 16 bits. Siguiendo tu logica AL es un registro de 8 bits y por lo tanto la instruccion xor al, al es de 8 bits. ¿el prefijo 66h es invalido en 64 bits? te vuelvo a decir: ¿no me digas?
Y yo te voy a decir lo que tendria que haberte dicho en tu primer mensaje: BAJATE DEL CABALLO, NO HAY MUCHA DISTANCIA. Ahora si, aprende a leer con atencion, nadie dijo que el prefijo fuera invalido, el opcode si lo es por lo explicado anteriormente. Tu ejemplo solo demuestra mi punto, la instruccion de 16 bits es 085h, 0C0h y es TEST AX, AX, el prefijo se necesita en 32 bits ya que de otra manera esa MISMA e IDENTICA instruccion seria TEST EAX, EAX. Las instrucciones dependen del modo de ejecucion y seria bueno que lo entendieras antes de volvera responder. PD. Estrictamente hablando las instrucciones de 16 bits son las que constan de dos bytes.
|
|
|
En línea
|
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
|
|
|
xv0
Desconectado
Mensajes: 1.027
|
Creo que este tema se esta desviando y hay un malentendido. Si las instrucciones trabajan con 16 bits, si las son, pero en realidad no son las originales de un 80x86, como dije anteriormente. Eso es lo que intento decir @ EI y se malinterpreto, por eso le pregute para que pudiera aclarar el tema. El prefijo 66h esta reservado, simplemente para que se sepa de que se esta trabajando con 16 bits, y el prefijo 48h para 64 bits pero no dejan de ser iguales todas simplemente que con prefijos: mov rbx, rax 48 89 c3 mov ebx, eax -- 89 c3 mov bx, ax 66 89 c3 test rbx, rax 48 85 d8 test ebx, eax -- 85 d8 test bx, ax 66 85 d8
Supongo que esto ayudara, los opcodes no coinciden con los originales de un 80x86 puro, modo real. PD. Estrictamente hablando las instrucciones de 16 bits son las que constan de dos bytes. Hay excepciones como por ejemplo xchg, tambien serian dos bytes en 64 bits pero con el prefijo indicado, con 16 igual con su prefijo, y por ultimo el 32 bits pues con el byte solo. Fue un malentendido no se ofusquen de esa manera xD. Un saludo.
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
Si las instrucciones trabajan con 16 bits, si las son, pero en realidad no son las originales de un 80x86, como dije anteriormente. Eso es lo que intento decir @EI y se malinterpreto, por eso le pregute para que pudiera aclarar el tema. Claro, no son las mismas por lo que ya mencione anteriormente: las instrucciones dependen del modo de ejecucion, el procesador las interpreta de acuerdo al modo de ejecucion. Supongo que esto ayudara, los opcodes no coinciden con los originales de un 80x86 puro, modo real. Hay mas excepciones como la que mostre del opcode DEC de un byte o la instruccion AAA (037h), esas son instrucciones de 16 bits y 32 bits (segun el modo de ejecucion), no son de 64 bits. Hay excepciones como por ejemplo xchg, tambien serian dos bytes en 64 bits pero con el prefijo indicado, con 16 igual con su prefijo, y por ultimo el 32 bits pues con el byte solo. Me referia a que una instruccion de un byte seria de 8 bits Fue un malentendido no se ofusquen de esa manera xD. Uno puede tener un mal dia, dos veces seguidas en dias consecutivos vomitando esa pedanteria indica que estamos ante un pobre individuo. Hasta aca llegamos con el tema.
|
|
|
En línea
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Inyeccion dll: [ Delphi ] - [ C++ ] - [ VB ] - [ Masm32 ] - [ C# ??? ]
« 1 2 »
.NET (C#, VB.NET, ASP)
|
XSaMuXPH *-* Traigo uno encima! =D!
|
10
|
11,240
|
10 Noviembre 2010, 18:41 pm
por luigymax
|
|
|
Colores en codigo ASM (MASM32)
ASM
|
Riki_89D
|
2
|
7,257
|
18 Octubre 2009, 18:47 pm
por Riki_89D
|
|
|
Bajar Masm32
ASM
|
тαптяα
|
7
|
6,895
|
16 Octubre 2010, 19:02 pm
por Eternal Idol
|
|
|
Masm32
ASM
|
Stuxnet
|
3
|
4,999
|
16 Noviembre 2012, 23:20 pm
por x64core
|
|
|
PlaySound en masm32
ASM
|
Nop+
|
3
|
3,959
|
18 Noviembre 2012, 18:54 pm
por Nop+
|
|