8088汇编指令详解:数据传输与端口操作

需积分: 9 6 下载量 53 浏览量 更新于2024-07-31 收藏 31KB DOCX 举报
本文档是关于8088汇编语言指令的速查手册,涵盖了数据传输、输入输出、目的地址传送以及标志传送等基本指令,对于理解和编写汇编代码具有参考价值。 在IT领域,尤其是系统级编程和逆向工程中,汇编语言是至关重要的,它能直接与计算机硬件交互。8088汇编语言是早期IBM PC兼容机使用的处理器架构,其指令集构成了后来的x86指令集的基础。以下是对文档中提到的一些关键汇编指令的详细解释: 1. 数据传输指令: - `MOV`:这是最基本的数据移动指令,可以将一个寄存器或内存位置的数据转移到另一个寄存器或内存位置。 - `MOVSX` 和 `MOVZX`:这两个指令用于数据的符号扩展和零扩展,例如,将8位数据扩展为16位或32位。 - `PUSH` 和 `POP`:将数据压入和弹出堆栈,常用于保存和恢复调用过程中的寄存器状态。 - `PUSHA` 和 `POPA`:快速将一组通用寄存器压入或弹出堆栈,节省单独操作每个寄存器的时间。 - `PUSHAD` 和 `POPAD`:与`PUSHA`和`POPA`类似,但适用于32位寄存器。 - `BSWAP`:用于交换32位寄存器中的字节顺序,常见于处理网络字节序和主机字节序的转换。 - `XCHG`:交换两个寄存器或内存位置的数据。 - `CMPXCHG`:比较并交换,如果目标和累加器相等,则交换,否则不做任何改变。 - `XADD`:先交换,然后将结果加到第一个操作数上。 - `XLAT`:字节查表指令,根据AL中的索引从内存中查找并返回数据。 2. 输入输出端口指令: - `IN` 和 `OUT`:分别用于从I/O端口读取和写入数据,可以使用立即数或DX寄存器指定端口号。 3. 目的地址传送指令: - `LEA`:装载有效地址,将一个内存地址加载到寄存器中,通常用于获取数组或结构体的地址。 - `LDS`, `LES`, `LFS`, `LGS`, `LSS`:这些指令用于加载段:偏移地址到特定的段寄存器,如DS、ES、FS、GS和SS,便于访问存储在不同段的内存。 4. 标志传送指令: - `LAHF`:将标志寄存器AH的内容复制到标志寄存器 FLAGS,用于快速读取部分标志位。 这些指令是汇编语言编程的基础,理解并熟练掌握它们对于编写底层程序和分析二进制代码至关重要。在反调试技术中,汇编指令的运用可以帮助开发者创建难以被调试器检测的代码,以防止软件被逆向工程。例如,通过检查调试标志(如`DF`标志),使用`NOP`指令填充代码段,或者利用`JMP`指令跳过可能被断点占据的地址,都是常见的反调试策略。然而,现代反调试技术已经发展得更为复杂,包括使用虚拟化、混淆和动态代码生成等方法来规避调试。
2018-12-06 上传
## Features ### Anti-debugging attacks - IsDebuggerPresent - CheckRemoteDebuggerPresent - Process Environement Block (BeingDebugged) - Process Environement Block (NtGlobalFlag) - ProcessHeap (Flags) - ProcessHeap (ForceFlags) - NtQueryInformationProcess (ProcessDebugPort) - NtQueryInformationProcess (ProcessDebugFlags) - NtQueryInformationProcess (ProcessDebugObject) - NtSetInformationThread (HideThreadFromDebugger) - NtQueryObject (ObjectTypeInformation) - NtQueryObject (ObjectAllTypesInformation) - CloseHanlde (NtClose) Invalide Handle - SetHandleInformation (Protected Handle) - UnhandledExceptionFilter - OutputDebugString (GetLastError()) - Hardware Breakpoints (SEH / GetThreadContext) - Software Breakpoints (INT3 / 0xCC) - Memory Breakpoints (PAGE_GUARD) - Interrupt 0x2d - Interrupt 1 - Parent Process (Explorer.exe) - SeDebugPrivilege (Csrss.exe) - NtYieldExecution / SwitchToThread - TLS callbacks ### Anti-Dumping - Erase PE header from memory - SizeOfImage ### Timing Attacks [Anti-Sandbox] - RDTSC (with CPUID to force a VM Exit) - RDTSC (Locky version with GetProcessHeap & CloseHandle) - Sleep -> SleepEx -> NtDelayExecution - Sleep (in a loop a small delay) - Sleep and check if time was accelerated (GetTickCount) - SetTimer (Standard Windows Timers) - timeSetEvent (Multimedia Timers) - WaitForSingleObject -> WaitForSingleObjectEx -> NtWaitForSingleObject - WaitForMultipleObjects -> WaitForMultipleObjectsEx -> NtWaitForMultipleObjects (todo) - IcmpSendEcho (CCleaner Malware) - CreateWaitableTimer (todo) - CreateTimerQueueTimer (todo) - Big crypto loops (todo) ### Human Interaction / Generic [Anti-Sandbox] - Mouse movement - Total Physical memory (GlobalMemoryStatusEx) - Disk size using DeviceIoControl (IOCTL_DISK_GET_LENGTH_INFO) - Disk size using GetDiskFreeSpaceEx (TotalNumberOfBytes) - Mouse (Single click / Double click) (todo) - DialogBox (todo) - Scrolling (todo) - Execution after reboot (todo) - Count of processors (Win32/Tinba - Win32/Dyre) - Sandbox k