|
发表于 2003-4-1 11:27:57
|
显示全部楼层
我也沒試過..
不知道行不行,不過kernel的確屏障了很多這種低級的操作,連BIOS中斷也不能用,只能用提供給我們的syscall中斷,同樣在Windows下也是,我做過一個?驗,寫了一個小程序:
- int main(void)
- {
- char *p = (char *)0xb8000020;
- *p++ = 65;
- *p++ = 0x41;
- return 0;
- }
复制代码
這是向顯示?沖區寫進一個字符,結果如下:
Windows 2k下用Visual C++ 6.0編譯 ==> 運行失敗
Windows 2k下用GCC 3.2編譯 ==> 運行失敗
Windows 2k下用Turbo C++ 3.0編譯 ==> 運行成功
RH8 Linux下用GCC 3.2編譯 ==> 運行失敗
用Turbo C++3.0編譯出?淼氖16位程式,而其余的都是32位,我想windows為了兼容以往的16位程式,所以允許它們進行低級操作,但32位程式就不能...
你要是真的想在Linux下訪問,也許要把程序放到Kernel起動前執行 又或者找找看kernel有沒有提供一些函數讓你訪問內存,總之我想要程序直接去訪問應該是不太可能的.. |
|