-
-
通过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直播授课