The Assembly Programming Master Book
Chapter 1: Windows Programming Tools
- Listing 1.1: The "Do Nothing" program
- Listing 1.2: Using the INCLUDE directive
- Listing 1.3: The PROG2.ASM module containing PROC1 procedure that will be called from the main module
- Listing 1.4: The PROG1.ASM module, calling a procedure from PROG2.ASM
- Listing 1.5: Using the INVOKE directive
- Listing 1.6: Using the library
- Listing 1.7: The module containing the ALT variable used in another module, PROG1.ASM
- Listing 1.8: The module using the ALT variable defined in another module, PROG2.ASM
- Listing 1.9: A program that uses simplified segmentation
- Listing 1.10: The results of disassembling a program using DUMPPE.EXE
Chapter 2: Windows Programming Basics
- Listing 2.1: The "skeleton" of window procedure
- Listing 2.2: An example of a simple Windows application (MASM32)
- Listing 2.3: An easy example of a Windows application (TASM32)
Chapter 3: Simple Programs Written in Assembly Language
- Listing 3.1: A window with an Exit button
- Listing 3.2: A window with an edit field
- Listing 3.3: A window with a simple list
- Listing 3.4: A program that creates a main window and two secondary windows
Chapter 4: 16-Bit Programming Overview
- Listing 4.1: An example of a 16-bit application
Chapter 5: MASM and TASM Assemblers
- Listing 5.1: A self-assembling and self-linking program
Chapter 6: Text Encoding in Windows
- Listing 6.1: The fragment that carries out ANSI to UNICODE conversion
Chapter 7: Examples of Simple Programs
- Listing 7.1: The simplest program that performs text output
- Listing 7.2: Keeping the text string in the center of the window
- Listing 7.3: Program fragment that outputs text using a custom font (see Fig. 7.1)
- Listing 7.4: Copying one string into another
- Listing 7.5: A simple program demonstrating how to work with graphics
Chapter 8: Console Applications
- Listing 8.1: A simple console application for MASM32
- Listing 8.2: A simple console application for TASM32
- Listing 8.3: Creating a console
- Listing 8.4: Processing keyboard and mouse events for a console application
- Listing 8.5: A timer in the console mode
- Listing 8.6: Working with the command-line parameters
Chapter 9: The Concept of ResourceResource Editors and Compilers
- Listing 9.1: A resource file with an icon code
- Listing 9.2: The use of simple resources
- Listing 9.3: A program with a menu
- Listing 9.4: Modeless dialog with a menu and the processing of accelerator messages
Chapter 10: Examples of Programs That Use Resources
- Listing 10.1: An example of manipulations with the menu
- Listing 10.2: The use of hotkeys with a dialog box
- Listing 10.3: A program working with two lists
- Listing 10.4: A simple program presenting a window with elements in the Windows XP style
Chapter 11: Working with Files
- Listing 11.1: A simple program that searches for files and displays the list of found files
- Listing 11.2: Example program that recursively searches the directory tree
- Listing 11.3: Text output from a file to a console (first method)
- Listing 11.4: Output of the contents of a text file into a console (second method)
- Listing 11.5: An example illustrating the processing of a text file
- Listing 11.6: Obtaining time attributes of a file
Chapter 12: Assembly Language Macro Tools and Directives
- Listing 12.1: Using conventional assembling to develop a compatible program
Chapter 13: More about File Management
- Listing 13.1: The server software (SERVER.ASM) creates a mailslot and waits for messages
- Listing 13.2: The client program (CLIENT.ASM) opens the mailslot and writes information there
- Listing 13.3: Reading the disk master boot record and partition table
Chapter 14: Examples of Programs Using the Timer
- Listing 14.1: The simplest timer
- Listing 14.2: The use of two timers
- Listing 14.3: Demonstration of popup help windows
Chapter 15: Multitasking
- Listing 15.1: Creating a process
- Listing 15.2: Creating a thread
- Listing 15.3: Synchronizing two threads using a critical section
Chapter 16: Creating Dynamic Link Libraries
- Listing 16.1: The simplest dynamic link library
- Listing 16.2: Calling the dynamic link library: Explicit linking
- Listing 16.3: Calling the dynamic link library: Implicit linking
- Listing 16.4: Passing parameters between the main module and the dynamic link library
- Listing 16.5: Loading resources from the dynamic link library
- Listing 16.6: The use of shared memory in dynamic link libraries
Chapter 17: Network Programming
- Listing 17.1: A simple example demonstrating how to determine the device type
- Listing 17.2: An example program that connects to the network resource
- Listing 17.3: Recursive search for network resources in a local area network
- Listing 17.4: The server component that receives requests from the clients
- Listing 17.5: The client program that calls the server component
Chapter 18: Solving Some Problems with Windows Programming
- Listing 18.1: The procedure that places an icon on the system toolbar
- Listing 18.2: The use of subclasses
- Listing 18.3: Communications with console process through an anonymous pipe
- Listing 18.4: Creating a list of running processes
Chapter 19: System Programming in Windows
- Listing 19.1: Dynamical memory allocation
- Listing 19.2: The global hook procedure
Chapter 20: Using Assembly Language with High-Level Languages
- Listing 20.1: Using a procedure from an external module (built using Borland C++ 5.0)
- Listing 20.2: A module written in Assembly language for compiling and linking using Visual C++ 7.0
- Listing 20.3: Using an object module with a Delphi program
- Listing 20.4: Using the fast calling convention when calling a procedure
- Listing 20.5: The console application written in C++ calls the graphic user interface-mode procedure (Listing 20.6) defined in an Assembly module
- Listing 20.6: Using resources and application program interface calls in the Assembly module
- Listing 20.7: A C module for the simplest calculator, which will be combined with the Assembly code in Listing 20.8
- Listing 20.8: Assembly module that must be combined with the C program from Listing 20.7
- Listing 20.9: Using the ASM directive and coprocessor commands in a Pascal program
- Listing 20.10: Using the ASM directive and coprocessor commands in a C program (Borland C++ 5.0)
- Listing 20.11: A dynamic link library implemented in Delphi
- Listing 20.12: How to call the dynamic link library (Listing 20.11) from an Assembly program
Chapter 21: Programming Services
- Listing 21.1: The simplest service (SERV.EXE)
- Listing 21.2: The program that installs the service (SETSERV.EXE)
- Listing 21.3: The program that starts the service (STSERV.EXE)
- Listing 21.4: The program that deletes the service (DELSERV.EXE)
Chapter 22: Overview of Debuggers and Disassemblers
- Listing 22.1: Fragment of the disassembled code
- Listing 22.2: A simple console application
- Listing 22.3: Disassembled code of the program in Listing 22.2
- Listing 22.4: An IDA Pro batch file
Chapter 23: Introduction to Turbo Debugger
- Listing 23.1: A simple console application
Chapter 25: Code Analysis Basics
- Listing 25.1: The main function of a console application
- Listing 25.2: The final form of the C program reconstructed on the basis of the disassembled code
- Listing 25.3: Two local arrays in a program disassembled using IDA Pro
- Listing 25.4: The code fragment from Listing 25.3 in W32Dasm
- Listing 25.5: A small C program
- Listing 25.6: Disassembled code of the program in Listing 25.5 compiled using Borland C++ 5.0
- Listing 25.7: Disassembled code of the program from Listing 25.5 compiled using Visual C++ 7.0
- Listing 25.8: A simple C++ program using objects
- Listing 25.9: Disassembled code of the main procedure in Listing 25.8
- Listing 25.10: Disassembled code of the main function from Listing 25.8 using the -x Borland C++ option
Chapter 26: Correcting Executable Modules
- Listing 26.1: The code fragment responsible for the delay
- Listing 26.2: The code fragment that checks the number of times the program was started
- Listing 26.3: The code fragment containing the call to the DialogBoxParam function
- Listing 26.4: The beginning of the window function
Chapter 27: Driver Structure and Development
- Listing 27.1: The VXD.DEF file used for compiling and building a virtual driver
- Listing 27.2: A virtual driver's "skeleton"
- Listing 27.3: The contents of the VXD 1.MAP file
- Listing 27.3: A sample static virtual driver
- Listing 27.4: The program that loads, uses, then unloads the virtual driver from the memory
- Listing 27.5: An example dynamic driver
- Listing 27.6: The structure containing the values of registers of the calling application
- Listing 27.7: Attempting to play sound by accessing input and output ports in a console program
- Listing 27.8: A simple kernel-mode driver that plays back a short sound signal
- Listing 27.9: The KERN.INC file used by the driver in Listing 27.8
- Listing 27.10: The program that opens the device created by the driver in Listing 27.11
- Listing 27.11: The kernel-mode driver for creating a device that processes several requests