chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
阅读:2036回复:7

获得gdt地址的问题

楼主#
更多 发布于:2008-01-20 15:36
我的机器是intel双核,操作系统是xp sp2.
我用如下方式获得gdt
typedef struct _GDTR
{
    USHORT limit;
    ULONG base;
}GDTR,*PGDTR;

void main()
{
    GDTR gdtr;
    __asm sgdt gdtr;
    printf("%x\n",gdtr.base);
}
我获得的值在两个值之间变化,ccccf772和cccc8003
听说是因为双核的原因,那怎么解决呢,我想通过调用门进入内核.
我又把几乎相同的代码放在内核下运行,得到的也是两个值,但是和用户态下得到的又不相同
f78ef772和f78e8003,这又是为何啊?
wedday
驱动牛犊
驱动牛犊
  • 注册日期2007-08-02
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望26点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-01-20 22:55
我也遇到同样的问题啊 盼望解答
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-23 14:16
今后的计算机都是多核了,我们还怎么编程呀
盼望高手救命啊!
chenting1987
驱动牛犊
驱动牛犊
  • 注册日期2006-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分530分
  • 威望54点
  • 贡献值0点
  • 好评度53点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-01-23 14:18
大家都来看看呀,看看你们有没有遇到同样的问题~~~~
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2008-01-24 14:00
是不是可以设置线程的亲缘性,只定在某个CPU上执行,具体函数忘了。
studehard
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2008-03-31
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2008-03-13 09:50
我的双核很正常......
但sgdt在虚拟机中执行就不正常.......

不管几核还几CPU,只要使用的是同一块内存,(99.99%机器都是这样的)
所有的GDT就应该是一样的! 不会出现每个cpu有不同的gdt
xtmzl
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2017-01-24
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望141点
  • 贡献值0点
  • 好评度55点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2008-03-13 14:07
typedef struct _GDTR
{
    USHORT limit;
    ULONG base;
}GDTR,*PGDTR;
结构要按字节对齐.
HOHO
studehard
驱动牛犊
驱动牛犊
  • 注册日期2008-02-28
  • 最后登录2008-03-31
  • 粉丝0
  • 关注0
  • 积分150分
  • 威望16点
  • 贡献值0点
  • 好评度15点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2008-03-15 10:54
s或Re:获得gdt地址的问题
对不起,我说错了!我道歉
双核CPU有2个不同的GDTR......但里面的描述是一样的
游客

返回顶部