ergaozheng
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2005-09-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1259回复:3

How to get a buffer which virtual address is below 4GB under 64 bit Windows2003 server kernel mode?

楼主#
更多 发布于:2005-03-16 16:53
     Under 64 bit Windows2003 server, I need to thunk from 64 bit mode to 16 bit compatibility mode in kernel (ring 0). So I allocate a buffer and place my 16 bit code to this buffer, and I create a new GDT descriptor as 16 bit code segment. Because 64 bit mode and 16 bit compatibility mode share OS 64 bit page table and my buffer is always above 4GB, and because AMD 64 bit CPU supports all GDT descriptor’s length as legacy, all descriptor’s base field is 32 bit length, so in 16 bit compatibility mode, CPU can not get instruction from my 16 bit code segment which is above 4 GB.
       Then If I can get a buffer below 4 GB and I place my 16 bit code into this buffer, OFFSET + CS.BASE(32 bit) can locate my 16 bit instruction. But OS can not support to allocate a buffer below 4 GB with normal ways.
       There are any way to help me to get a buffer which virtual address is below 4GB under 64 bit Windows2003 server kernel mode?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-03-16 18:03
你可以自己构造页表指向你分配的页.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
ergaozheng
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2005-09-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-17 08:47
对页表的操作不太了解,用什么API来实现?能不能具体一点, 好赶时间的。 谢谢!
ergaozheng
驱动牛犊
驱动牛犊
  • 注册日期2004-08-11
  • 最后登录2005-09-28
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-17 15:54
其实我们的问题最终是要在64bit里能call 实模式下16bit的程序, 由于兼容性和架构的愿因, 不得不如此,但现有的资料实在太少,哪位有空帮帮忙, 少不了庆功酒的!
游客

返回顶部