关于_RTC_CheckEsp_

来源:互联网 发布:php过滤html标签 编辑:程序博客网 时间:2024/04/27 21:53

今天工作时,反汇编中注意到_RTC_CheckEsp_这个函数,查了查资料,发觉这是个运行时检查函数,应该是用来检查缓冲区溢出的。

具体代码如下:

0135154B  int         3  
0135154C  int         3  
0135154D  int         3  
0135154E  int         3  
0135154F  int         3  
_RTC_CheckEsp:
01351550  jne         esperror (1351553h)  
01351552  ret  
esperror:
01351553  push        ebp  
01351554  mov         ebp,esp  

调用出现的位置有:

printf("input a number: ");
013513BE  mov         esi,esp  
013513C0  push        offset string "input a number: " (135575Ch)  
013513C5  call        dword ptr [__imp__printf (13582B8h)]  
013513CB  add         esp,4  
013513CE  cmp         esi,esp  
013513D0  call        @ILT+305(__RTC_CheckEsp) (1351136h)  
scanf("%d",&n);
013513D5  mov         esi,esp  
013513D7  lea         eax,[n]  
013513DA  push        eax  
013513DB  push        offset string "%d\n" (1355758h)  
013513E0  call        dword ptr [__imp__scanf (13582B4h)]  
013513E6  add         esp,8  
013513E9  cmp         esi,esp  
013513EB  call        @ILT+305(__RTC_CheckEsp) (1351136h)  

printf和scanf函数都会先保存esp至esi中,printf/scanf函数调用结束后,调用_RTC_CheckEsp检查值有没有发生改变。

函数结束ret过程中也有类似操作,不过是esp和ebp进行比较。

注意到空白区域存在大量int 3,这些区域应该是跳转不到的,用一字节长的int 3中断填充。

0 0
原创粉丝点击