漏洞分析原理

参考《加密与解密》第14章,本章讲解的软件漏洞属于二进制漏洞

传统的缓冲区溢出,UAF等设计二进制编码的漏洞成功那位二进制漏洞。

 

线程调用HeapCreate( );函数:
HANDLE WINAPI HeapCreate(
__in DWORD flOptions,
__in SIZE_T dwInitialSize,
__in SIZE_T dwMaximumSize );
 
malloc是在CRT的内存堆上分配的,这个堆的存在一般来说你是不会关心的
HeapAlloc则不同,你需要给它指定你想从哪个堆上分配,而这个堆是从HeapCreate创建出来的
 
long 32位
 

 

 

 

简介

__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 指令相同:

 

 

posted @ 2020-12-24 21:32  KnowledgePorter  阅读(20)  评论(0)    收藏  举报