常用汇编命令+OD使用命令 总结笔记
- 格式:docx
- 大小:39.96 KB
- 文档页数:17
汇编语言常用指令汇总持续更新汇编语言常用指令汇总汇编语言是一种低级编程语言,用于与计算机硬件进行直接交互。
熟悉汇编语言的常用指令对于理解计算机底层原理和进行底层编程非常重要。
本文将对汇编语言常用指令进行汇总,并持续更新。
1. 数据传输指令:- MOV:用于将数据从一个位置复制到另一个位置。
- LXI:用于将双字节立即数加载到指定的寄存器对中。
- LDA:用于将累加器加载到内存地址中的数据。
- STA:用于将累加器中的数据存储到指定的内存地址中。
2. 算术运算指令:- ADD:用于将累加器的内容与给定的寄存器或内存位置中的数据相加。
- SUB:用于从累加器中减去给定的寄存器或内存位置中的数据。
- INR:用于将给定的寄存器或内存位置中的数据增加1。
- DCR:用于将给定的寄存器或内存位置中的数据减少1。
3. 逻辑运算指令:- AND:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑与操作。
- OR:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑或操作。
- XOR:用于将累加器的内容与给定的寄存器或内存位置中的数据进行逻辑异或操作。
- NOT:用于对累加器的内容进行逻辑非操作。
4. 控制指令:- JMP:用于无条件转移到指定的内存地址。
- JZ:在累加器为零时,转移到指定的内存地址。
- JC:在进位标志为1时,转移到指定的内存地址。
- CALL:用于调用子程序。
5. 栈操作指令:- PUSH:用于将给定的寄存器或数据压入栈中。
- POP:从栈中弹出数据并存储到给定的寄存器中。
6. 输入输出指令:- IN:从外部设备读取数据,并存储到累加器中。
- OUT:将累加器中的数据发送到外部设备。
以上仅是汇编语言中常用指令的一小部分,还有许多其他指令可用于执行更复杂的任务。
在实际的汇编语言程序中,这些指令通常会与标签、变量和宏指令一起使用。
总结:汇编语言常用指令汇总了数据传输、算术运算、逻辑运算、控制、栈操作和输入输出等方面的指令。
OD使用须知常识CPU寄存器和汇编指令OD(Operator's Manual)是运营手册的缩写,指的是一份文件或手册,用于指导用户正确操作和使用一些产品或系统。
对于OD使用者来说,掌握一些基本常识是非常重要的。
在学习OD使用须知之前,我们先来了解一下CPU寄存器和汇编指令。
一、CPU寄存器CPU(Central Processing Unit,中央处理器)寄存器是CPU内部的一组高速存储器,用于临时存放指令、数据和地址等信息。
CPU寄存器可以分为通用寄存器和特殊寄存器两种。
通用寄存器:这些寄存器的尺寸通常与CPU的数据总线宽度相同,用于存放临时数据,例如计算结果、函数参数等。
常见的通用寄存器有AX、BX、CX、DX等。
不同的CPU有着不同的寄存器数量和命名方式。
特殊寄存器:这些寄存器具有特殊的功能,例如指令指针寄存器(Instruction Pointer,IP)用于存放下一条要执行的指令的地址;程序状态寄存器(Program Status Register,PSR)用于存放程序的状态信息,例如标志位(比如进位标志、溢出标志等)。
寄存器在计算机中起到了至关重要的作用,它们可以提供高速的数据存储和交换,加快了计算机的运行速度。
在汇编语言中,寄存器常用来存放计算过程中的中间结果。
二、汇编指令汇编指令(Assembly Instruction)是一种低级的机器指令,用来直接控制CPU的运行。
与高级语言相比,汇编指令更加底层,更接近机器语言。
它通过助记符(Mnemonic)来表示具体的操作,例如加载数据到寄存器、进行算术运算等。
汇编指令通常包括两部分:操作码和操作数。
操作码指示了具体的操作,例如MOV表示数据传送操作;操作数则指定了操作所需的参数,例如MOVAX,BX表示将BX寄存器的值传送给AX寄存器。
由于汇编语言直接操作CPU,因此具有很高的灵活性和效率,但也非常依赖于硬件平台和CPU架构。
OD使用须知常识CPU寄存器和汇编指令
1. 计算机的CPU主要包括一级 cache、二级 cache、控制器、ALU
和寄存器,其中寄存器最重要、最基础,是CPU内部最高效率的部分。
2.寄存器是一种可以快速存储和检索数据,并且具有高度的读取操作
速度的一种电路;它可以将一个或多个数据和信息保存在其中,也可以用
于控制程序的运行,以及执行指令的过程中。
3.寄存器分为几种不同的种类,其中包括存储器寄存器和指令寄存器;其中,存储器寄存器用来存储数据,而指令寄存器用来存储程序指令,并
且可以在CPU中被直接读取执行。
4.对于编程来说,寄存器的使用非常重要,特别是在需要处理大量数
据时;比如,当一个程序时调用一些函数或者进行复杂的算法计算时,在
程序开始和结束时,往往使用特定的寄存器来存储(处理结果的)数据,
使得处理速度更快,更有效。
5.在使用CPU的时候,必须要懂得使用CPU汇编指令;汇编语言是一
种用于控制CPU的机器级语言,通过汇编指令可以非常有效的控制CPU,
增强性能和效率。
6.对于不同的CPU,汇编指令也不相同;比如,x86汇编指令集(8086)是一种最常用的面向x86的指令集,其中包括了对寄存器的操作
指令。
OD之常⽤命令⼀:od断点注释保存的问题,由于od只有在正常退出的情况下才会保存分析代码时留下的注释,⽽很多时候为了在退出od时不让⽬标程序退出使⽤了剥离进程,这样就会导致这次操作所有的注释都没有保存,第⼆次重新载⼊时候⼜的重新分析注释下断点,所以需要⾃⼰下载⼀个插件 Myinfo.dll,这个插件可以⼿动保存注释和断点,插件⾥⾯的导出操作是把注释导出到⼀个⽂件中,导⼊操作是把注释导⼊到od代码分析界⾯来,注意,每次导出操作都会删掉⽂件中的内容,保留本次导出内容⼆: 插件安装,od插件只需把插件的dll粘贴到od安装⽂件夹的plugin⽂件夹中即可三: 定位代码时有时使⽤⼀些花指令代码⽐如_asm{ mov eax,eax mov eax,eax} 这样的代码⽆实际作⽤,但是有助于定位程序代码段,可是查找命令序列时有时找不出来,这就需要点查看可执⾏模块,找出⽬标模块,双击,⼀般需要重复两次操作,这样才能找到该命令序列,以为开始中断并不处于主模块内,需要进⼊主模块段才可以查找注释和指令四:od⼀些常⽤命令dd 以四字节⽅式转储,也就是以四字节的⽅式查看地址内存的值,⽐如⼀个数组 array[20] 它的⾸地址是405118 那么 dd 405118 就可以看到array[0]的值了,dd i*0x4+405118 就可以看到数组array[i]的值,游戏分析时分析对象数组,dd [eax*4+03f82520] ⾸先取出数组03f82520[eax]⾥⾯保存的地址,然后查看该地址的值,很多怪物对象的⾸地址都是放在对象数组⾥⾯,找到该地址,就可以分析出该怪物的相应信息如 dd [eax*4+03f82520] +0xc 这个可能就是怪物⽣命等等dc 是以ascill码显⽰该地址,这个⼀般是查看⽂本信息hw硬件中断在写⼊时db 以⽐特格式⼗六进制转储当然有⼀些快捷键命令暂时不表五: 备份,修改数据之前,难免要备份,这就要⽤到备份功能,这样就可以很容易恢复到修改之前六: 跟踪调试,这个功能相当不错,可以记录所有寄存器的值,这样便于观察分析七: 直接更改程序汇编代码,然后保存到⽂件,这样就相当于更改了部分程序代码,很⽅便⼋:下API断点等熟悉了再补充。
适用于OllyDbg 的快捷命令栏插件(显示于程序的状态栏上方)CALC判断表达式WATCH添加监视表达式AT / FOLLOWDisassemble at address在地址进行反汇编ORIGDisassemble at EIP反汇编于EIPDUMPDump at address在地址转存DADump as disassembly转存为反汇编代码DBDump in hex byte format转存在十六进制字节格式DCDump in ASCII format转存在ASCII 格式DDDump in stack format转存在堆栈格式DUDump in UNICODE format转存在UNICODE 格式DWDump in hex word format 转存在十六进制字词格式STKGo to address in stack前往堆栈中的地址AS + 地址+ 字符串Assemble at address在地址进行汇编L + 地址+ 字符串Label at address在地址进行标号C + 地址+ 字符串Comment at address在地址进行注释BPBreak with condition使用条件中断BPXBreak on all calls中断在全部调用BPDDelete break on all calls 清除位于全部调用的断点BCDelete breakpoint清除断点MRMemory breakpt on access 内存断点于访问时MWMemory breakpt on write内存断点于写入时MDRemove memory breakpoint 清除内存断点HRHW break on access硬件中断在访问HWHW break on write硬件中断在写入HEHW break on execution硬件中断在执行HDRemove HW breakpoint清除硬件断点STOP停止运行程序调试PAUSE暂停程序调试RUNRun program运行程序进行调试Run till address运行到地址GERun and pass exception 运行和通过例外SIStep into步入SOStep over步过TITrace in till address跟踪进入直到地址TOTrace over till address 跟踪步过直到地址TCTrace in till condition跟踪进入直到条件TOCTrace over till condition 跟踪步过直到条件TRTill return直到返回TUTill user code直到用户代码LOGView Log window查看记录窗口MODView Modules window查看模块窗口MEMView Memory window查看内存窗口CPUView CPU window查看CPU 窗口CSView Call Stack查看Call 堆栈BRKView Breakpoints window 查看断点窗口OPTOpen Options打开选项EXIT / QUITQuit OllyDbg退出OllyDbgOPENOpen executable file打开可执行文件CLOSEClose executable关闭程序RSTRestart current program恢复当前程序HELPHelp on API functionAPI 函数的帮助DASMDisassemble immediate opcode反汇编直接的机器码FRFind reference to selected command/address 查找参考到选定的命令/地址ACAnalyse code分析代码SNSearch for Name(label) in current module在当前模块中搜索名称(标号)SOBScan object files扫描项目文件OllyDbg 常用快捷热键打开一个新的可执行程序(F3)重新运行当前调试的程序(Ctrl+F2)当前调试的程序(Alt+F2)运行选定的程序进行调试(F9)暂时停止被调试程序的执行(F12)单步进入被调试程序的Call 中(F7)步过被调试程序的Call (F8)跟入被调试程序的Call 中(Ctrl+F11)跟踪时跳过被调试程序的Call (Ctrl+F12) 执行直到返回(Ctrl+F9)显示记录窗口(Alt+L)显示模块窗口(Alt+E)显示内存窗口(Alt+M)显示CPU 窗口(Alt+C)显示补丁窗口(Ctrl+P)显示呼叫堆栈(Alt+K)显示断点窗口(Alt+B)打开调试选项窗口(Alt+O)。
OD基本汇编指令jmp ;⽆条件跳转指哪飞哪⼀些杂志中说的直飞光明顶,指的就是它了~ 光明顶⼀般指爆破地址根据条件跳转的指令:JE ;等于则跳转 JNE ;不等于则跳转 JZ ;为 0 则跳转 JNZ ;不为 0 则跳转 JS ;为负则跳转 JNS ;不为负则跳转 JC ;进位则跳转 JNC ;不进位则跳转 JO ;溢出则跳转 JNO ;不溢出则跳转 JA ;⽆符号⼤于则跳转 JNA ;⽆符号不⼤于则跳转 JAE ;⽆符号⼤于等于则跳转 JNAE ;⽆符号不⼤于等于则跳转 JG ;有符号⼤于则跳转 JNG ;有符号不⼤于则跳转 JGE ;有符号⼤于等于则跳转 JNGE ;有符号不⼤于等于则跳转 JB ;⽆符号⼩于则跳转 JNB ;⽆符号不⼩于则跳转 JBE ;⽆符号⼩于等于则跳转 JNBE ;⽆符号不⼩于等于则跳转 JL ;有符号⼩于则跳转 JNL ;有符号不⼩于则跳转 JLE ;有符号⼩于等于则跳转 JNLE ;有符号不⼩于等于则跳转 JP ;奇偶位置位则跳转 JNP ;奇偶位清除则跳转 JPE ;奇偶位相等则跳转 JPO ;奇偶位不等则跳转------------说了以上那么多也许⼤家会觉得晕但我们实际⽤到的⼀般只有 jmp je jne jz jnz⽽已所以⼤家只要清楚这5个跳转的条件即可,别的那些了解下就好了----------下⾯开始说传递跟⽐较指令传递指令:mov⽐较指令:cmp-----------mov是从右边向左边传递⽐如说:mov eax,1 ‘为eax赋值为1mov ecx,eax ’这样ecx也就是1了我们可以现学现⽤我们上⾯讲了跳转⼤家可以注意⼀下,我开头有说是标志位跳转那么什么是标志位呢就像mov eax,1mov ecx,eaxcmp ecx,eax 这个就是标志位我们已知eax跟ecx都是1那就符合je的跳转条件je是等于跳转。
od反编译工具用法OD是一款常用的反编译工具,适用于Windows、Linux等操作系统。
它可以帮助研究人员、黑客等对二进制文件进行反汇编、调试、修改等操作。
使用OD反编译工具需要掌握一些基本的命令和用法。
1. 安装OD工具OD工具可在官网下载,也可使用Linux系统自带的软件包管理器进行安装。
Windows用户可在GitHub上下载。
2. 使用OD工具在Linux终端中输入od命令即可进入OD工具。
使用OD工具可以对可执行文件、共享库、内核模块等进行反汇编、调试、修改等操作。
3. 常用命令(1) od -t <type> <file>:以指定格式输出文件内容。
(2) od -N <bytes> <file>:输出指定字节数的文件内容。
(3) od -A <address> <file>:从指定地址开始输出文件内容。
(4) od -j <offset> <file>:从指定偏移量开始输出文件内容。
(5) od -x <file>:以十六进制格式输出文件内容。
(6) od -c <file>:以字符格式输出文件内容。
(7) od -t x1 <file>:以字节为单位输出文件内容。
(8) od -t d1 <file>:以十进制格式输出文件内容。
4. 反编译使用OD工具可以对二进制文件进行反编译。
在OD工具中输入'u main'命令即可反编译文件中的main函数。
反编译后可查看函数中的汇编代码和注释,便于对代码进行分析和修改。
总之,OD反编译工具是一款非常有用的工具,掌握其基本命令和用法可帮助研究人员、黑客等更好地对二进制文件进行反汇编、调试、修改等操作。
编32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)对低16位数据的存取,不会影响高16位的数据。
这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
寄存器EAX通常称为累加器(Accumulator)用累加器进行的操作可能需要更少时间。
可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register) 在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register) 在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址注意:在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,2个变址和指针寄存器(ESI和EDI)其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
2个指针寄存器(ESP和EBP)其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
32位CPU有2个32位通用寄存器EBP和ESP。
它们主要用于访问堆栈内的存储单元。
寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
指针寄存器不可分割成8位寄存器。
作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶6个段寄存器(ES、CS、SS、DS、FS和GS)段寄存器段寄存器是根据内存分段的管理模式而设置的。
内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
CPU内部的段寄存器:ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
1个指令指针寄存器(EIP)指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。
1个标志寄存器(EFlags)1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。
如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
2、奇偶标志PF(Parity Flag)奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。
如果“1”的个数为偶数,则PF的值为1,否则其值为0。
利用PF可进行奇偶校验检查,或产生奇偶校验位。
在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位。
3、辅助进位标志AF(Auxiliary Carry Flag)在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:(1)、在字操作时,发生低字节向高字节进位或借位时;(2)、在字节操作时,发生低4位向高4位进位或借位时。
对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。
4、零标志ZF(Zero Flag)零标志ZF用来反映运算结果是否为0。
如果运算结果为0,则其值为1,否则其值为0。
在判断运算结果是否为0时,可使用此标志位。
5、符号标志SF(Sign Flag)符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的正负号。
运算结果为正数时,SF的值为0,否则其值为1。
6、溢出标志OF(Overflow Flag)溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。
“溢出”和“进位”是两个不同含义的概念,不要混淆。
如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
二、状态控制标志位状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
1、追踪标志TF(Trap Flag)当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。
这种方式主要用于程序的调试。
指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。
2、中断允许标志IF(Interrupt-enable Flag)中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。
但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
具体规定如下:(1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;(2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
CPU的指令系统中也有专门的指令来改变标志位IF的值。
3、方向标志DF(Direction Flag)方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。
具体规定在第5.2.11节——字符串操作指令——中给出。
在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
汇编指令:常用MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里)ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减1.NEC 求反(以0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)逻辑运算指令AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.程序转移指令1.简单的条件转移指令JZ(或jE) OPR---------------结果为零转移, 测试条件ZF=1JNZ(或jNE) OPR --------------结果不为零转移,测试条件ZF=0JS OPR----------------------结果为负转移, 测试条件SF=1JNS OPR---------------------结果为正转移, 测试条件SF=0JO OPR--------------------- 溢出转移, 测试条件OF=JNO OPR --------------------不溢出转移, 测试条件SF=0JP OPR ---------------------结果为偶转移, 测试条件SF=1JNP OPR --------------------结果为奇转移, 测试条件SF=0JC OPR -------------------- 有进位转移, 测试条件SF=1JNC OPR --------------------无进位转移, 测试条件SF=02.无符号比较条件转移指令(以下指令经常是CMP OPD,OPS后面的指令根据比较结果来实现转移)JB(或JNAE) opd --------------小于或者不大于等于则转移JNB(或JAE) opd---------------不小于或者大于等于则转移JA(或NJBE) OPD---------------大于或者不小于等于则转移JNA(或JBE) OPD---------------不大于或者小于等于则转移3.带符号比较条件转移指令JL(或JNGE) --------------小于或者不大于等于则转移JNL(或JGE)--------------不小于或者大于等于则转移JG(或NJLE)---------------大于或者不小于等于则转移JNG(或JLE)---------------不大于或者小于等于则转移调用子程序与返回指令CALL 子程序调用指令RET 子程序返回指令其它指令OFFSET -------------------- 返回偏移地址SEG -------------------- 返回段地址EQU(=) -------------------- 等值语句PURGE -------------------- 解除语句DUP -------------------- 操作数字段用复制操作符SEGMENT,ENDS -------------------- 段定义指令ASSUME -------------------- 段地址分配指令ORG -------------------- 起始偏移地址设置指令$ --------------------地址计数器的当前值PROC,ENDP -------------------- 过程定义语句NAME,TITLE,END -------------------- 程序开始结束语句MACRO,ENDM --------------------宏定义指令XLAT (TRANSLATE)-------------------- 换码指令----条件标志ZF 零标志-- 当结果为负时,SF=1,否则,SF=0.AF 辅助进位标志---运算过程中第三位有进位值,置AF=1,否则,AF=0PF 奇偶标志------当结果操作数中偶数个"1",置PF=1,否则,PF=0SF 符号标志----当结果为负时,SF=1;否则,SF=0.溢出时情形例外CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,置CF=1;否则,CF=0.OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0OllyDbg 常用快捷热键打开一个新的可执行程序(F3)重新运行当前调试的程序(Ctrl+F2)当前调试的程序(Alt+F2)运行选定的程序进行调试(F9)暂时停止被调试程序的执行(F12)单步进入被调试程序的Call 中(F7)步过被调试程序的Call (F8)跟入被调试程序的Call 中(Ctrl+F11)跟踪时跳过被调试程序的Call (Ctrl+F12)执行直到返回(Ctrl+F9)显示记录窗口(Alt+L)显示模块窗口(Alt+E)显示内存窗口(Alt+M)显示CPU 窗口(Alt+C)显示补丁窗口(Ctrl+P)显示呼叫堆栈(Alt+K)显示断点窗口(Alt+B)打开调试选项窗口(Alt+O)F9 使用方法:Ctrl+F9 运行至retAlt+F9 运行至上层调用的下句Shift+F9 忽略异常运行BTW:Ollydbg.hlp有中文翻译版为何不看?Shift+F9 - 与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。