X64切换到X32模式遇到的问题

今天在看x32注入的x64的时候意识到一个问题,既然x32能到x64那x64也能到x32,于是写下了下面的代码。

#include<windows.h>
#include<stdio.h>

//这里是返回到x32模式
char RetFar[10] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x00 };

__declspec(naked) void exp() {
	__asm {
		__emit 0xcc

	}
}

__declspec(naked) void run() {
	__asm {

		mov rax, 0x0000000140007000

		__emit 0x48 //jmp far tword ptr ds:[rax]
		__emit 0xff
		__emit 0x28
		
	}
}


int main() {
	DWORD Address = 0x401000,targetAddress=0;
	targetAddress=(DWORD)VirtualAllocEx(GetCurrentProcess(),&Address,0x1000,MEM_COMMIT, PAGE_EXECUTE_READWRITE);

	printf("%d\n",GetLastError());//ERROR_ACCESS_DENIED

	*(PULONG64)RetFar = targetAddress;//(ULONG64)exp;

	memset(&targetAddress,0xcc,0x1000);

	run();
	return 0;
}

这个代码的作用是切换cs段选择子到x32模式下,但是如果直接却换的话地址是大于7fffffff的,所以直接访问的话会出现c0000005错误,所以这里尝试申请这块地址,但是最后的返回值为5。意思就是系统不让我们申请这块地址,最后导致就算切换到了x32也不能执行x32的代码。

目前无法解决这个问题,发出来希望看到的大佬指点一下。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值