首页
社区
课程
招聘
通过cal
发表于: 2016-9-23 12:32 3125

通过cal

2016-9-23 12:32
3125
// tss.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <windows.h>

DWORD dwok;
DWORD dwcs;
DWORD dwesp;

__declspec(naked) func(){
        dwok=1;
        __asm{
        int 3
        mov eax,esp
        mov dwesp,eax
        mov ax,cs
        mov word ptr[dwcs],ax
        iret//返回的时候蓝屏
        }
}

int main(int argc, char* argv[])
{
        char bu[0x10];
        int iCr3;
        printf("please input iCr3:\n");
        scanf("%x",&iCr3);
        DWORD tss[0x68]={
        0x00000000,//link,由cput自动填充
        0x00000000,//esp0
        0x00000000,//ss0
        0x00000000,//esp1
        0x00000000,//ss1
        0x00000000,//esp2
        0x00000000,//ss2
        (DWORD)iCr3,
        0x00401020,//eip
        0x00000000,//eflags
        0x00000000,//eax
        0x00000000,//ecx
        0x00000000,//edx
        0x00000000,//ebx
        (DWORD)bu,//esp
        0x00000000,//ebp
        0x00000000,//esi
        0x00000000,//edi
        0x00000023,//es
        0x00000008,//cs
        0x00000010,//ss
        0x00000023,//ds
        0x00000030,//fs
        0x00000000,//gs
        0x00000000,//ldtr
        0x20ac0000
        };
        printf("tess=%x",&tss);
        char buff[6];
        *(DWORD*)&buff[0]=0x12345678;
        *(WORD*)&buff[4]=0xC0;
        _asm{
        call fword ptr[buff]
        }

        printf("dwok=%x,dwcs=%x,dwesp=%x",dwok,dwcs,dwesp);
        return 0;
}

-----------------------------------
通过call来实现任务段的切换,返回的时候用iret返回主函数的时候蓝屏,请问有人知道否?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 70
活跃值: (30)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
知道了,  __asm{
  int 3
  mov eax,esp
  mov dwesp,eax
  mov ax,cs
  mov word ptr[dwcs],ax
  iret//返回的时候蓝屏
  }知道了。去掉上面的int 3就可以了,加上后int3可能会破坏堆栈平衡导致蓝屏。
2016-9-28 10:31
0
游客
登录 | 注册 方可回帖
返回
//