Red de conocimiento informático - Descarga de software - La piedra está tallada en piedra: un prefacio a la programación en lenguaje ensamblador de 32 bits en el entorno Windows

La piedra está tallada en piedra: un prefacio a la programación en lenguaje ensamblador de 32 bits en el entorno Windows

Desde la aparición de Windows, el lenguaje ensamblador parece estar desapareciendo lentamente, pero este libro puede hacer que la gente abandone esta visión. De hecho, el lenguaje ensamblador sigue siendo poderoso en el entorno Win32.

Por qué... ¿Por qué elegir el ensamblaje Win32?

¿Cuáles son las razones para elegir el ensamblaje Win32?

En la era de DOS, aprender ensamblador es sinónimo de aprender la programación subyacente del sistema. Para convertirse en un programador ensamblador de nivel básico, debe aprender la estructura de la CPU, los métodos de trabajo de la CPU y los métodos de programación. varios hardware. Una amplia gama de conocimientos, incluido cómo funciona DOS. Con la llegada de la era Windows, Windows es como un enorme muro que nos separa del hardware de la computadora. Para los programadores de ensamblaje de DOS, como de la noche a la mañana, encontramos que casi todo lo que hemos aprendido ha sido encapsulado en el kernel por Windows. Debido a la existencia del modo protegido, no podemos hacer lo que hicimos en DOS. kernel del sistema y haz lo que quieras. La programación en cualquier lenguaje en Windows debe seguir las especificaciones de Windows y el ensamblador no es una excepción. En otras palabras, el ensamblador ya no es un lenguaje "privilegiado". Ante el creciente poder de Visual C, Visual Basic, PowerBuilder, Java y otros campos, han sido despedidos de la posición de "policía del sistema" de "hacer lo que quieran" en la era DOS y no tienen habilidades en otros campos. El lenguaje ensamblador parece haber perdido el significado de supervivencia. Muchas personas abandonaron el lenguaje ensamblador cuando DOS recurrió a Windows.

Pero después de un breve período de pérdida y corrección de nuestra posición en el sistema, descubrimos que después de cambiar de "policía del sistema" a "buenos ciudadanos" siguiendo las especificaciones de Windows, el lenguaje ensamblador comenzó lentamente a desarrollarse nuevamente en este El mundo se dio cuenta. Después de todo, puede haber un lado bueno en no poder hacer lo que uno quiere. Ya no tenemos que considerar algunas de las cuestiones más difíciles, como qué tipo de tarjeta gráfica se enfrentará cuando se ejecute el programa, cómo hacerlo. manejar diferentes impresoras, cómo usar el intercambio de disco cuando la memoria no es suficiente, etc., espere. También podemos dominar la programación ensambladora Win32 con menos conocimientos de hardware. Además, nos sorprendió gratamente descubrir que después de convertirnos en "buenos ciudadanos", tenemos los mismos derechos que otros lenguajes: para proporcionar gráficos y funciones de interfaz, los programadores ensambladores de la era DOS incluso soñaban con envidiar el lenguaje C. Una biblioteca de funciones enorme, y ahora Windows nos proporciona muchas más funciones que esta, por lo que la mayoría de las funciones que otros lenguajes pueden realizar se pueden realizar en ensamblador, pero las funciones que otros lenguajes no pueden realizar solo se pueden realizar en ensamblador. hecho en asamblea. ¡Aún puedes hacerlo! Esta es una de las razones: el ensamblador Win32 se puede utilizar como un potente lenguaje de desarrollo y se puede desarrollar software a gran escala con él.

Solo porque el ensamblaje de Win32 ya no parece tan de bajo nivel, algunos lectores señalaron una vez: el ensamblaje de Win32 habla sobre el uso de API para escribir programas, que es similar a los lenguajes de alto nivel. En el pasado, las interrupciones eran. utilizado en DOS Ninguno de ellos funciona, por lo que no hay nada nuevo. Algunos lectores piensan que este libro es sólo una versión compilada de MSDN. La implicación es: aprender ensamblador es comprender las funciones del nivel inferior de los lenguajes de alto nivel, pero ahora el ensamblador Win32 usa la misma interfaz API que lenguajes como C. Dado que está al mismo nivel que el lenguaje de alto nivel. Idiomas de nivel, ¿por qué deberíamos ir a la máquina? Cuando se trata de instrucciones, es más fácil aprender Visual C.

Pero podemos preguntarnos esto:

P: ¿Por qué usamos la función de interrupción en ensamblador de DOS?

Respuesta: Para poder utilizar las funciones proporcionadas por el kernel de DOS.

P: En DOS, ¿utilizamos a menudo el método de operar el puerto de E/S para leer y escribir en el disco duro u operar la tarjeta gráfica?

Respuesta: No, utilizamos int 13h e int 10h proporcionados por el sistema.

...

De manera similar, usar la API en el ensamblado Win32 también significa usar las funciones proporcionadas por el kernel de Windows. Es solo que el método utilizado ya no es el método de interrupción. Este no es el lenguaje ensamblador Win32 de "alto nivel", sino el lenguaje de alto nivel de "bajo nivel" porque usa la interfaz API de Windows. No se puede trasplantar a otros sistemas. Los programas escritos en Visual C no se pueden trasplantar a otras plataformas de sistemas operativos. Solo ANSI C independiente de la plataforma y otros pueden considerarse lenguajes de alto nivel en el verdadero sentido.

De hecho, cualquier lenguaje ensamblador está estrechamente relacionado con el sistema operativo, ya sea ensamblador de DOS, ensamblador de Win32 o ensamblador de Linux, todos se basan en un sistema operativo específico. sistema, Entonces no habrá diferencia entre el ensamblaje de DOS y el ensamblaje de Win32, pero en este caso no estamos aprendiendo a ensamblar, sino a desarrollar nuestro propio sistema operativo. Los lenguajes de alto nivel se ven similares en diferentes sistemas operativos, pero como lenguaje de bajo nivel, el ensamblador en diferentes sistemas operativos es un mundo diferente. Por lo tanto, dado que Windows y DOS son dos sistemas operativos completamente diferentes, debemos abandonar la mayoría de los conceptos del ensamblaje de DOS y aprender el ensamblaje de Win32 desde cero. Esta es la segunda razón: el ensamblador Win32 es un lenguaje de programación completamente nuevo en el entorno de Windows.

Muchos lenguajes de alto nivel en el entorno Win32, como Visual C y Visual Basic, siguen encapsulando en mayor o menor medida los detalles de implementación, incluso las partes que mejor expresan las características de Windows. , como mensajes. Los contenidos como bucles y procesamiento multiproceso también están ocultos y encapsulados, lo que nos hace imposible comprender completamente la forma específica en que se ejecutan los programas Win32 mientras los usamos para la programación visual. Después de aprender el ensamblaje de Win32, se exponen estos detalles ocultos detrás de los lenguajes de alto nivel.

Debido a la encapsulación, varios lenguajes de alto nivel tienen más o menos "defectos". Por ejemplo, VB no admite punteros. Como resultado, muchas API que requieren el uso de punteros son muy inconvenientes. Para usar, como subprocesos múltiples, un tipo de característica no se puede implementar en VB, y lo mismo ocurre con PowerBuilder. El lenguaje C ya es el lenguaje de alto nivel más flexible, pero aún no puede manejar ciertos requisitos a nivel de código. ; y el lenguaje ensamblador ve el sistema operativo más realista, puede usar varias funciones del sistema de la manera más flexible. El contenido sobre la ocultación de procesos en el Capítulo 13 es la mejor descripción. Entonces, la tercera razón es: usar el lenguaje ensamblador Win32 es la mejor manera de comprender los detalles operativos del sistema operativo.

La última razón no es una razón en absoluto, sino una elección inevitable cuando realizamos cifrado, descifrado, ingeniería inversa y análisis y prevención de códigos dañinos como virus y troyanos en el entorno Windows, Win32. El montaje es la única opción. En cualquier libro que trate este tema, siempre hay una gran sección sobre código ensamblador. Por lo tanto, el requisito previo para una comprensión profunda de estos contenidos es profundizar en la programación ensambladora.

Cómo——Cómo aprender a ensamblar Win32

Los libros de ensamblaje anteriores tendían a centrarse en la estructura del hardware y las instrucciones, y contaban muchos diagramas de bloques de circuitos y listas de instrucciones, lo que confundía a todos. Después de sentirme mareado, citaré algunos ejemplos pesados, ya sea operaciones complejas como matrices y cálculos matriciales, o comenzaré a dibujar en modo gráfico, ¡para que todos ya no puedan encontrar la respuesta después de leerlo! De hecho, estos ejemplos no son demasiado difíciles, pero sí demasiado aburridos. Algunas personas dicen que aprender asamblea es como tomar un examen de ingreso a la universidad. Miles de soldados cruzan un puente de una sola tabla. Demasiadas personas se dan por vencidas a mitad del camino y solo unas pocas persisten hasta el final.

El autor cree que el aprendizaje debe llevarse a cabo en un ambiente relajado. Los ejemplos utilizados en el aprendizaje no son necesariamente demasiado complicados, pero deben ser atractivos.

Ciertamente es más eficiente escribir programas de cálculo complejos en ensamblador que en C, pero se puede hacer lo mismo con una expresión en C. Comenzar a aprender ensamblador desde aquí es como comenzar a aprender aritmética a partir de fórmulas complejas, ya sabes, la suma. ¡Aún no se ha aprendido! En cuanto a las funciones del sistema encapsuladas en lenguajes de alto nivel, las explicaciones en ensamblador son muy sencillas, muy naturales y más fáciles de entender. Tomando como ejemplo el proceso de aprendizaje ensamblado del propio autor, fue 1990, cuando ocurrió la primera pandemia de virus en China. Las computadoras de todos estaban llenas del creador del virus: el virus Ping-Pong Durante el período en que DOS era popular. , viendo La bolita rebotando en la pantalla, y me surge una pregunta: ¿Cómo programar algo así? ¡Debes saber que DOS es de una sola tarea y la pelota aún rebota cuando se ejecutan otros programas! Esto no puede explicarse por ningún conocimiento aprendido en los cursos populares como FORTRAN y C en ese momento, porque no puede haber TSR, interrupciones, áreas de arranque, etc. en estos cursos. Con esa pregunta en mente, aprendí a ensamblar y repasé instrucciones que no entendía en el proceso de análisis del virus del ping-pong. Una vez completado el análisis del virus, también completé la clase de ensamblaje y, por otro lado, Esos complejos programas de cálculo eran tan lógicos que no me ataqué a mí mismo. De hecho, aprender en ensamblaje a partir de algunas funciones prácticas del sistema es mucho más fácil de entender que aprender cálculos matriciales.

Al igual que el programa C más clásico es "¡Hola, mundo!", este programa es famoso no porque haya abrumado a un gran número de personas con sus declaraciones sofisticadas y complejas, sino porque tiene las funciones más simples. y la forma más sencilla de hacerlo. Permita que las personas entren por la puerta del lenguaje C de una manera clara. Lo mismo ocurre con el ensamblaje de Win32. Siempre es correcto comenzar con los ejemplos más simples. El autor recomienda que los lectores sigan los ejemplos de este libro desde los más simples hasta los más complejos y se esfuercen por comprender y consultar de manera flexible las diversas funciones de estos ejemplos. al igual que "Leer familiarmente" "Trescientos poemas Tang, incluso si no puedes escribirlos, también puedes recitarlos". Al final, poder usar hábilmente el ensamblaje Win32 para resolver diversas necesidades de programación es la mayor victoria.

Además, como se mencionó anteriormente, el aprendizaje del lenguaje ensamblador debe estar estrechamente integrado con el sistema operativo. Después de una simple investigación, el autor descubrió que los tutoriales de ensamblaje utilizados por muchos colegios y universidades todavía se basan en la edición 91 de "Programación en lenguaje ensamblador IBM-PC" de la Universidad de Tsinghua y otros libros de texto, aunque la parte de conocimientos básicos de estos libros de texto nunca lo será. Está desactualizado, no involucra el sistema operativo. Algunas partes todavía están atascadas en la etapa de DOS. A medida que el sistema operativo DOS se retira silenciosamente, es un desperdicio seguir gastando energía en él, porque cualquier idioma debe tener una plataforma de aplicación; de lo contrario, se avergonzará al descubrir que no hay lugar para aplicarlo después de completar el curso. El autor cree que después de estudiar las partes básicas de libros de texto tradicionales como "Programación en lenguaje ensamblador de IBM-PC", la atención debería centrarse en el conocimiento del modo protegido y ensamblador de Win32.

Acerca del contenido de este libro

Este libro intenta escribir aplicaciones desde la perspectiva de la escritura, desde el simple ejemplo de "Hola, mundo" hasta la escritura de registros y subprocesos múltiples. y comunicación de red y otros programas complejos, a través de más de 70 ejemplos, desde simples hasta complejos, profundizando gradualmente en todos los aspectos de la programación ensambladora Win32. El autor se ha dedicado a la programación ensambladora durante más de diez años. Desde el comienzo de la programación ensambladora de DOS en la era 8086 hasta la programación ensambladora actual de Win32, desde un principiante hasta que ahora puede usar el ensamblador Win32 para resolver la mayoría de las necesidades de programación. Ha pasado mucho tiempo en el medio. Después de un largo período de exploración y mucha frustración, el autor sabe muy bien dónde encontrarán problemas los principiantes, pero hay muy pocos libros sobre el ensamblaje de Win32. Debido a esto, el autor está decidido a establecer el objetivo de este libro: permitir que los lectores comiencen y al final dominen la programación ensambladora Win32 de manera competente, en lugar del tipo de libro que profundiza en los misterios del sistema.

A partir de este objetivo, la selección de materiales de este libro intentará eliminar partes que se han discutido en detalle en otros libros, porque no es realista que un libro cubra todos los aspectos. Si el contenido es completo, inevitablemente será impreciso, y si el contenido es profundo, debe centrarse en un punto central. Por lo tanto, el contenido de este libro no analiza en detalle las partes básicas de los libros de texto de asamblea general, como el procesador. estructura y modo de protección, ni pretende cubrir los controladores de Windows y la programación COM o algo más que podría denominarse "secreto".

El contenido principal de este libro tratará sobre las diferencias entre el ensamblaje de macros de 32 bits y el ensamblaje de DOS, así como la implementación del ensamblaje de aplicaciones Win32. ¡No busques amplitud, solo busca refinamiento! (Para ser honesto, no me atrevo a comentar cosas en las que no soy competente, para no dañar mi buena imagen.)

En algunos foros de programación ensambladora, los principiantes suelen preguntar sobre MASM y ¿Cuáles son las diferencias entre TASM, cuál es mejor usar, qué significa la etiqueta @@, por qué el programa no se puede compilar con el compilador ensamblador descargado, etc. Aunque estas son las preguntas más básicas, realmente no había lugar o libro que pudiera abordarlos antes. Explique estos temas de manera sistemática y exhaustiva. Los capítulos básicos de este libro están diseñados por este motivo:

● Capítulo 1 Conocimientos previos

● Capítulo 2 Preparación del entorno de programación

● Capítulo. 3 Capítulo Uso de MASM

Cuando construir un entorno de compilación y usar un compilador ya no son obstáculos, los problemas de los principiantes a menudo se centran en la confusión sobre la estructura del programa de Windows, como los sistemas controlados por mensajes, los procedimientos de ventana y Las interfaces gráficas aisladas por hardware y los archivos de recursos son contenido nuevo en comparación con los programas de DOS. Los próximos cuatro capítulos discutirán estos contenidos en profundidad. A través de estos capítulos, los lectores deberían comenzar a acostumbrarse a pensar en los problemas relacionados con Windows (DOS se desvanece gradualmente en sus mentes...). libro:

● Capítulo 4 El primer programa de ventana

● Capítulo 5 Uso de recursos

● Capítulo 6 Temporizadores y tiempo de Windows

● Capítulo 7 Operación de gráficos

El sistema Windows no es como el sistema DOS. Su interfaz de programa de aplicación está estandarizada. La interfaz unificada proviene de una gran cantidad de controles de interfaz unificados. escribir la interfaz de Windows. Los siguientes dos capítulos del capítulo de interfaz explorarán este aspecto:

● Capítulo 8 Cuadro de diálogo común

● Capítulo 9 Control común

Aprender En este punto, los lectores deberían poder escribir programas Win32 estándar con interfaces estandarizadas. Sin embargo, todavía es imposible utilizar estos programas para resolver algunos problemas específicos, porque aún no ha comenzado la introducción de funciones avanzadas del sistema Windows, como administración de memoria, operaciones de archivos y subprocesos múltiples. Estos son los contenidos que se presentarán en el capítulo del sistema de este libro. A través de estos contenidos, los lectores tendrán una comprensión más profunda de cómo funciona Windows:

● Capítulo 10 Administración de memoria y operaciones de archivos

.

● Capítulo 11 Biblioteca de vínculos dinámicos y enlaces

● Capítulo 12 Subprocesos múltiples

● Capítulo 13 Control de procesos

● Capítulo 14 Manejo de excepciones

p>

Creo que a estas alturas los lectores tienen una comprensión relativamente sistemática de Windows. Aunque hay muchos otros aspectos en Windows, como tuberías, ranuras de correo, cómo escribir programas del panel de control, protectores de pantalla y controladores, etc. Pero después de tener la base anterior, no será un problema para los lectores entender estos contenidos por sí mismos, porque si dominas la "pesca", ¿cuál es la dificultad para conseguir "peces"? En los últimos capítulos, este libro presentará algunas operaciones de programación de red, registro, archivos PE y bases de datos de uso común desde la perspectiva de la aplicación. Este es el capítulo de aplicación:

● Capítulo 15 Capítulo Registro y archivo INI.

● Capítulo 16 Programación de red y interfaz WinSock

● Capítulo 17 Archivo PE

● Capítulo 18 Programación de bases de datos ODBC

En este libro , el autor ha destacado algunas palabras de experiencia. Estas son las experiencias del autor adquiridas en la programación ensambladora a largo plazo y es posible que no se encuentren en ningún libro de texto o manual. ¡Espero que puedan ser útiles para los lectores!

Las partes marcadas con "bombillas" representan algunos consejos que pueden favorecer la comprensión de la programación.

Las partes marcadas con "signos de exclamación" indican partes propensas a errores, lo que puede ayudar a los lectores a evitar algunos errores difíciles de entender.

Suposiciones sobre los lectores

Con el posicionamiento del contenido, el posicionamiento de los lectores será más claro. Este libro es adecuado para los siguientes lectores:

● Quieren. Úselo como lector de ensamblaje Win32 para escribir aplicaciones de Windows.

● Lectores que quieran cambiar del ensamblado de 16 bits en DOS al ensamblado de 32 bits en Windows.

● Lectores que quieran comprender el ensamblaje de Win32 y sentar las bases para el cifrado y descifrado, la seguridad del sistema, la ingeniería inversa, etc. en Windows.

● Lectores que quieran comprender el ensamblaje de Win32 y sentar las bases para usar el ensamblaje para escribir controladores de Windows.

● Estudiantes que están tomando cursos de ensamblaje y necesitan complementar la parte de Win32 del curso de ensamblaje.

Antes de comenzar este libro, los lectores deben tener los siguientes conocimientos básicos:

● Conocimientos básicos de computadoras, como conversión de bases, operaciones lógicas, tipos de variables y conceptos de punteros, etc.

● Conocimientos básicos de estructuras de datos, debido a que la programación Win32 involucra una gran cantidad de estructuras de datos.

● Conocimientos básicos del lenguaje C, debido a que la mayoría de los materiales de referencia para la programación Win32 aparecen en formato C.

● Conocimientos básicos del procesador Intel 80x86, como modo de direccionamiento y uso de instrucciones.

Este libro no está preparado para los siguientes lectores:

● Lectores que quieran aprender más sobre el modo protegido: debido a que Windows no es una plataforma abierta, la apertura de Windows se limita a interfaz de aplicaciones, por lo que usar Windows para realizar una investigación de antecedentes sobre el modo protegido genera problemas. Si los lectores necesitan comprender este aspecto en profundidad, la mejor manera es estudiar el código central de Linux y experimentar en Linux.

● Lectores que quieran comprender los "secretos" del núcleo de Windows: la compilación no es lo mismo que profundizar en las partes internas del sistema operativo, por lo que este libro no es "Análisis del kernel de Windows". En el verdadero sentido, "Análisis del kernel de Windows", excepto Microsoft, me temo que nadie puede escribirlo.

● Lectores que deseen comprender la escritura de los controladores de Windows: para presentar los controladores de Windows con claridad, la extensión requerida nunca será menor que la extensión de este libro. Este libro no pretende cubrir este aspecto. Si está interesado, puede leer libros como "Programación de WDM" y "Programación del sistema para Windows 95". El primero habla sobre el controlador WDM en Windows 2000/Windows NT y el segundo sobre el controlador VxD en Windows 9x.

¿Qué hay de nuevo en la tercera edición?

Han pasado más de 6 años desde que se publicó la primera edición de este libro y han pasado 3 años desde que se publicó la segunda edición. Durante este período, el autor recibió una gran cantidad de cartas de lectores que expresaron diversas opiniones y sugerencias sobre este libro. Basado en diversas consideraciones, la tercera edición de este libro realizó las siguientes mejoras.

● Se han corregido los errores conocidos en la segunda edición, incluidos algunos errores tipográficos, errores tipográficos y errores en los ejemplos.

● Se ha actualizado o eliminado algún contenido obsoleto.

● Algunos capítulos se han reescrito en función de los comentarios de los lectores.

Acerca del código del libro adjunto y los comentarios de los lectores

Para explicar mejor el método de programación ensamblador Win32, este libro viene con más de 70 ejemplos. Los códigos fuente de estos ejemplos pueden todos. Se encuentra en el libro adjunto. Se encuentra en el CD del libro. Todos los códigos están escritos en formato MASM. El software de compilación recomendado es el paquete de software MASM32 SDK.

Los códigos de ejemplo de este libro se han sometido a estrictas pruebas antivirus y no contienen ningún virus. Sin embargo, los ejemplos del Capítulo 11 implican tecnología de enlace y los ejemplos del Capítulo 17 implican la operación de archivos PE. Los pequeños fragmentos de código son similares a las firmas de algunos troyanos y virus, y algunos programas antivirus los confunden con virus desconocidos. No dude en utilizarlos sin preocupaciones.

Aunque todos los códigos de ejemplo de este libro se han probado en Windows 98, Windows 2000, Windows XP y Windows Vista, también existe la posibilidad de que haya errores si encuentra errores en el código o los encuentra allí. hay errores en el libro. Para otros problemas, informe al autor para que puedan mejorarse en la próxima versión. Si los lectores tienen algún comentario, ya sea crítica o aliento, comuníquese con el autor. Visite el sitio web del autor para obtener la dirección de correo electrónico más reciente y válida.

Luo Yunbin

Agradecimientos

En primer lugar, me gustaría agradecer a mis padres por cultivarme desde la infancia, nada de esto sería posible. . También me gustaría agradecer a mi hermana por siempre brindarme mucha ayuda en muchos momentos críticos.

Gracias a mi esposa Xiaozhuzhu. Sin su comprensión y apoyo cuando se creó este libro, no habría podido completar dicho trabajo en los días posteriores a su publicación, si no fuera así; para usted Si dona generosamente su tiempo para ir de compras, comprar ropa y viajar, y vigila al pequeño bebé que corre, este libro no tendrá la oportunidad de reimprimirse muchas veces.

Gracias a mi alma mater, la Universidad de Zhejiang, el lema de la escuela de "buscar la verdad y la innovación" y su espíritu escolar de "buscar la verdad a partir de los hechos, ser riguroso y pragmático, luchar por el progreso, ser pionero e innovador. “Me han permitido tener buenos hábitos de estudio, lo que me ha permitido En los años posteriores a la graduación, siempre tendré la motivación para aprender los últimos conocimientos.

Gracias al Sr. Guo Li y al editor Li Bing de Bowen Viewpoint Information Co., Ltd. de Electronic Industry Press. Su apoyo, estímulo y orientación profesional permitieron completar este libro a tiempo según lo previsto.

Estoy muy feliz de ver la reimpresión de este libro. Las dos primeras ediciones de este libro han logrado unas ventas acumuladas de 40.000 copias desde el lanzamiento de la primera edición de este libro hasta ahora. Recibió muchos lectores y comentarios de los internautas para hacer este libro más perfecto. Con motivo del lanzamiento de la tercera edición, me gustaría agradecerles nuevamente por su cuidado y amor por mí, y también gracias por brindarme muchas opiniones y sugerencias valiosas.

Luo Yunbin