- 论坛徽章:
- 0
|
二、微软的利用 cookie 对缓冲区溢出措施的原理
1、foo() 编译器作处理原理如下:
foo: <---------- 在此处安插 cookie 值
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl fptr, %eax
movl $.LC0, 4(%esp)
leal -4(%ebp), %edx
movl %edx, (%esp)
call *%eax
movl fptr+4, %eax
movl $.LC1, (%esp)
call *%eax
leave
ret <---------- 在函数返回前安插检测代码
|
2、在我写的测试的安插 cookie 处理之后,如下
foo:
pushl cookie <---------- 在此处安插 cookie 值
pushl %ebp
movl %esp, %ebp
subl $24, %esp
movl fptr, %eax
movl $.LC0, 4(%esp)
leal -4(%ebp), %edx
movl %edx, (%esp)
call *%eax
movl fptr+4, %eax
movl $.LC1, (%esp)
call *%eax
leave
pop %edx <---------- 在函数返回前安插检测代码
cmpl %edx, cookie
je 1f
movl $do_fault, %esi
call *%esi /* 出错处理例程 */
1f:
ret |
|
|