关于_RTC_CheckEsp_

今天工作时,反汇编中注意到_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中断填充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值