Me preguntaba qué son los "NOP semánticos" en el ensamblaje.Asamblea: ¿qué son los NOP semánticos?
Respuesta
Código que no es un nop real pero que no afecta el comportamiento del programa.
En C, la siguiente secuencia podría ser pensado como un NOP semántica:
{
// Since none of these have side affects, they are effectively no-ops
int x = 5;
int y = x * x;
int z = y/x;
}
Un NOP semántico es un conjunto de instrucciones en lenguaje de máquina que no tienen ningún efecto en absoluto o casi ningún efecto (más instrucciones de cambio códigos de condición) cuyo único propósito es ofuscación de lo que el programa realmente está haciendo.
Código que se ejecuta pero no hace nada significativo. Estos también se llaman "predicados opacos" y se usan con mayor frecuencia por obfuscators.
Son instrucciones que no tienen ningún efecto, como un NOP, pero toman más bytes. Útil para obtener el código alineado con un límite de línea de caché. Una instrucción como lea edi, [edi + 0] es un ejemplo, tomaría 7 NOP para llenar el mismo número de bytes pero toma solo 1 ciclo en vez de 7.
Un verdadero "nop semántico" es una instrucción que no tiene más efecto que tomarse un tiempo y avanzar el contador del programa. Muchas máquinas en las que los movimientos de registro para registrar no afectan a los indicadores, por ejemplo, tienen numerosas instrucciones que moverán un registro a sí mismo. En el 8088, por ejemplo, cualquiera de los siguientes sería NOP semánticas:
mov al,al mov bl,bl mov cl,cl ... mov ax,ax mob bx,bx mov cx,cx ... xchg ax,ax xchg bx,bx xchg cx,cx ...
Tenga en cuenta que todo lo anterior a excepción de "hacha xchg, hacha" son instrucciones de dos bytes. Por lo tanto, Intel ha declarado que se debe usar "xchg ax, ax" cuando se requiere un NOP de un byte. De hecho, si uno ensambla "mov ax, ax" y lo desmonta, se desarmará como "NOP".
Tenga en cuenta que, en algunos casos, una instrucción o secuencia de instrucciones puede tener posibles efectos secundarios, pero, no obstante, es más deseable que el "nop" habitual. En el 6502, por ejemplo, si uno necesita un retraso de 7 ciclos y el puntero de la pila es válido pero el valor de la parte superior de la pila es irrelevante, un PHP seguido de un PLP eliminará siete ciclos utilizando solo dos bytes de código. Sin embargo, si el valor de la parte superior de la pila no es un byte de reserva de RAM, la secuencia fallará.
- 1. ¿Qué son los errores semánticos en C-language y dar algunos ejemplos?
- 2. C# ILGenerator nop?
- 3. Asamblea Evidencia
- 4. referencia Asamblea VS2010 entre los proyectos no
- 5. Comentarios semánticos roscados de HTML5
- 6. ¿Qué son los RFC?
- 7. ¿Qué son los conceptos?
- 8. ¿Qué son los futuros?
- 9. ¿Por qué el código IL generado comienza con un Nop?
- 10. espacios de nombres RDF (datos semánticos)
- 11. NOP para Binarios de Iphone
- 12. ¿Qué son los objetos anclados?
- 13. ¿Qué son los objetos diferidos?
- 14. ¿Qué son los archivos NDF?
- 15. ¿Qué son los métodos virtuales?
- 16. ¿Qué son los zócalos Async?
- 17. ¿Qué son los operadores levantados?
- 18. ¿Qué son los índices hipotéticos?
- 19. ¿Qué son los archivos .S?
- 20. ¿Qué son los objetos inmutables?
- 21. ¿Qué son los idiomas ISO?
- 22. Asamblea, hola pregunta mundo
- 23. ¿Qué código Java forzará a javac 1.6 a usar los códigos de operación 'swap' y 'nop'?
- 24. % gs en Asamblea
- 25. Ofuscación Asamblea y Reflexión
- 26. ¿Qué es un módulo administrado (en comparación con una Asamblea)?
- 27. Asamblea - instrucción JZ después CMP
- 28. Asamblea Segmentación de fallos
- 29. Etiquetado automático de roles semánticos en FrameNet
- 30. Únete extremos semánticos en consulta SPARQL