none
应用程序访问权限 RRS feed

  • 问题

  • 应用程序访问权限

    Windows 汇编语言程序设计教程》电子工业出版社 page 33 说:

    #include <stdlib.h>

    #include <stdio.h>



    int main()

    {

        unsigned int var = 10;

        unsigned int *ptr1 = &var;

        unsigned int *ptr2 = (unsigned int *)0xC0000000L;



        printf("*(0x%08x)=",ptr1);

        printf("0x%08x\n",*ptr1);

       

        printf("*(0x%08x)=",ptr2);

        printf("0x%08x\n",*ptr2);

        return 0;

    }

    上述代码中 ,由于ptr2指向的地址 0xC0000000 属于系统地址空间,需要特权级0的系统程序才可以访问,因此printf("0x%08x\n",*ptr2);语句执行时出错

    但是我现在把   unsigned int *ptr2 = (unsigned int *)0xC0000000L; 修改为 
     unsigned int *ptr2 = (unsigned int
    *)0x20000000L;时,这个地址0x20000000属于用户地址空间 0x00000000H-- 0x7ffffffffH
    ,为什么仍旧在执行的时候出错呢 ??


    进一步 修改为  unsigned int *ptr2 = (unsigned int *)0x0012ff84L; 则正确


    难道 书本介绍的 户地址空间 0x00000000H-- 0x7ffffffffH 有误?还是因为它介绍的对象是 80386 的CPU  

    而我们现在使用的是 迅驰 PC , 户地址空间 分配的大小不是 2G 呢 ?

    2008年10月13日 15:47

答案

  • VirtualQuery 查询内存的访问权限。
    2008年10月13日 21:55
    版主
  • Use windbg to debug the problem:

     

    0:000> !address 20000000

        10320000 : 10320000 - 67880000

                        Type     00000000

                        Protect  00000001 PAGE_NOACCESS

                        State    00010000 MEM_FREE

                        Usage    RegionUsageFree

     

    State    00010000 MEM_FREE

    说明该地址区域没有被分配

    因此执行unsigned int *ptr2 = (unsigned int*)0x20000000L; 的时候会出错。

    这和用户地址空间是两个概念。

    2008年10月23日 6:50

全部回复

  • VirtualQuery 查询内存的访问权限。
    2008年10月13日 21:55
    版主
  • Use windbg to debug the problem:

     

    0:000> !address 20000000

        10320000 : 10320000 - 67880000

                        Type     00000000

                        Protect  00000001 PAGE_NOACCESS

                        State    00010000 MEM_FREE

                        Usage    RegionUsageFree

     

    State    00010000 MEM_FREE

    说明该地址区域没有被分配

    因此执行unsigned int *ptr2 = (unsigned int*)0x20000000L; 的时候会出错。

    这和用户地址空间是两个概念。

    2008年10月23日 6:50
  • 我输入!address 20000000时提示:
     
    ***    Your debugger is not using the correct symbols                 ***
    ***                                                                   ***
    ***    In order for this command to work properly, your symbol path   ***
    ***    must point to .pdb files that have full type information.

    您能告诉我怎么设置 才能使
    my symbol path point to .pdb files 呢??
    如果您方便的化,我希望您给我份
    windbg 的使用说明,谢谢啦!!
    2008年10月28日 15:58