中国开发网: 论坛: 程序员情感CBD: 贴子 705546
bjwf
有定论,有问题.
比如

u32 bios_read_protec;

....

u32 a;
fast_read_memory(32, u32, 1, a)


fast_read_memory 展开后,会是这样一个语句:

a = *((u32 *)((u8 *)&bios_read_protect+1));

任何编译器下 bios_read_protect 的地址都会是4的整数倍,假设是 0x10000
上面的语句就相当于:

a = *((u32 *)(0x10001));

会访问 0x10001, 0x10002, 0x10003, 0x10004 这四个字节的内存,而 0x10004这个字节用来放什么,是链接器觉定的.因为bios_read_protect只占用 0, 1, 2, 3这四个字节.

在x86上这句话不会报错,但逻辑显然有问题.
大多数非x86上,比如arm, 68k, cpu会产生一个地址异常
试图在互联网上划出国界的举动是愚蠢的!!!
把人当成猪羊圈养,草料永远都不够!把人当人待,人有无限的创造力! “人口减少一半,人们两倍富有”的观念为“一种非常糟糕的自甘堕落—这背后的潜台词是,似乎中国人是封闭围栏中的动物,对周围那些自己赖以生存的资源,除了咀嚼,别无办法。”

我的像册:http://picasaweb.google.com/bjwf2000/
我的主页: http://bjwf2000.googlepages.com/

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录