漏洞分析原理
参考《加密与解密》第14章,本章讲解的软件漏洞属于二进制漏洞
传统的缓冲区溢出,UAF等设计二进制编码的漏洞成功那位二进制漏洞。
HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的

简介
__asm 关键字用于调用内联汇编程序,并且可在 C 或 C++ 语句合法时出现。
_asm是 __ASM 的同义词。
语法
__asm后跟一个程序集指令、一组括在大括号中的指令或者至少一对空大括号。
1、__asm与大括号一起使用,则该关键字表示大括号之间的每一行都是一条汇编语言语句。
如:
_asm { mov al, 2 mov dx, 0xD007 out al, dx }
2、__asm不与大括号一起使用,放在代码行首部,则 __asm 关键字表示此行的其余部分是一条汇编语言语句。
如:
__asm mov al, 2
__asm mov dx, 0xD007
__asm out al, dx
3、__asm做语句分隔符,可将汇编语句放在同一行代码中。
如:
__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx
lodsb、stosb(和lodsw、stosw和lodsd、stosd指令)
-->lodsb 指令:从esi 指向的源地址中逐一读取一个字符,送入AL 中; (然后,可以先判断这个字符是什么字符,如0dh,0ah 之类等,再执行相应的操作);
-->stosb 指令:一般跟随在lodsb 指令后面,将AL 中的字符逐一写入edi 指向的目的地址;
当方向标志位D=0时,则esi自动增加;D=1时,esi自动减小。
类似有:
-->如果是lodsw ,表明要处理的是字,而不是字符;则采用的相应指令是:stosw ;那么要判断的寄存器是AX,而不是AL 了.
-->如果是lodsd ,表明要处理的是双字;则采用的相应指令是: stosd ;这时候,要判断的寄存器就是EAX了
LODS是指令规定源操作数为(DS:SI),目的操作数隐含为AL(字节)或AX(字)寄存器。三种指令都用于将源操作数的内容取到AL或AX寄存器,字节还是字操作由寻址方式确定,并根据寻址方式自动修改SI的内容。
ROR(循环右移)指令把所有位都向右移,最低位复制到进位标志位和最高位。该指令格式与 SHL 指令相同: