(x64)Linux下的中断门测试——Cr4.SMEP/SMAP


接上文Linux下的中断门测试:(x64)Linux下的中断门测试

在Cr4.SMAP/SMEP开启的情况下,以内核态执行用户程序代码或访问数据,将引发错误。


测试代码如下:
#include <stdio.h>

__attribute__((naked)) void int3_handler()
{
	//printf("___ kernel mode ___\n");
	//printf("return to UserMode!\n");
	asm volatile ("movq %cr4, %rax; \
		orq $0x100000, %rax; \
		movq %rax, %cr4; \
		movq $0xffffffff12345678, %rax; \
		popq %rbp; \		
		iretq");
}	// orq $0x100000, %rax; 执行写cr4寄存器,开启SMEP

int main()
{
	long res = 0x1234567812345678;
	char buff[] = "haha,walker!";
	long rsp, rbp;

	asm volatile ("movq %%rsp, %%rax; movq %%rbp, %%rbx" : "=a"(rsp), "=b"(rbp));	
	printf("buff:%s addr: %p\n", buff, buff);
	printf("int3_handler addr: %p\n", int3_handler);
	printf("stack rsp: %p; rbp: %p; res addr: %p\n", rsp, rbp, &res);
	getchar();

	asm volatile ("int $0x3;");
	asm volatile ("leaq %0, %%rdx; movq %%rax, (%%rdx);" : "=m"(res));
	printf("___ user mode ___\n");
	printf("Good Done! res: %p\n", res);

	return 0;
}

处理函数的汇编指令如下:
在这里插入图片描述

当程序执行 movabs $0xffffffff12345678,%rax 指令时将引发错误!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值