汇编
调试
1 2 3 4 5 6 7
| debug test.exe -r 查看当前的状态,包括寄存器、 地址和汇编指令 -p 单步步过 -t 单步步入 -u 查看汇编代码,在输入u接着显示 -d 0d9a 显示内存 -g 退出
|
指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| call ret ;加减法: add p1,p2 ;两数相加把结果放p1 inc ax ;自增相当于ax++ sub p1,p2;两数相减把结果放p1 dec ax ;自减相当于ax-- loop ;每循环一次CX(计数寄存器)的值减一
cmp p1,p2;两数相减比较 CF:进位位,有进位或借位为1 ZF:零值位,计算结果为0则为1 cmp ax,bx; ax- bx ==0 -> CF:0 ZF:1 ax!=bx-> ax-bx!=0 -> ZF:0 ax<bx -> ax-bx<0 -> CF:1 ZF:0 ab>bx -> ax-bx>0 -> CF:0 ZF:0 ax<=bx -> ax-bx<=0 -> CF:1 || ZF:1 ax>=bx -> ax -bx>=0 -> CF:0 || ZF:1
jmp addr;无条件跳转,不依赖条件 je/jz (标号/地址);条件转移,等于则跳转,ZF=1 jne addr;不等于则跳转,ZF=0则跳转 jb addr; 低于则跳转 CF=1 ja addr; 高于则跳转 CF=0 && ZF=0 jnb addr;不低于则跳转 jna addr;不高于则跳转
|
“函数”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| assume cs:code code segment ;定义一个函数 btadd PROC ;取ax,bx相加并把结果保存在ax add ax,bx ;返回 ret btadd ENDP ;程序入口 start: mov ax,3 mov bx,4 call btadd ;退出 mov ax,4C00H ;DOS中断 int 21 code ends end start
|
Flag寄存器
xxxxxxxxxx __construct() 当一个对象创建时被调用,__destruct() 当一个对象销毁时被调用,__toString() 当一个对象被当作一个字符串被调用。__wakeup() 使用unserialize时触发__sleep() 使用serialize时触发__destruct() 对象被销毁时触发__call() 在对象上下文中调用不可访问的方法时触发__callStatic() 在静态上下文中调用不可访问的方法时触发__get() 用于从不可访问的属性读取数据__set() 用于将数据写入不可访问的属性__isset() 在不可访问的属性上调用isset()或empty()触发__unset() 在不可访问的属性上使用unset()时触发__toString() 把类当作字符串使用时触发,返回值需要为字符串__invoke() 当脚本尝试将对象调用为函数时触发php