看板 C_and_CPP 關於我們 聯絡資訊
請問一下 我要測試實體記憶體 不知道這樣寫法觀念是否正確 main() { int pattern=0xAAAAAAAA; int* pDest = 0x100; int* pEnd = 0x30000; //寫VALUE進去 do{ *pDest = pattern; } while (++pDest < pEnd); pDest =0x100; //看看讀出來對不對 do{ if(*pDest != pattern) break; } while (++pDest < pEnd); } 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.241.21
james732:首先會遇到的應該是保護模式問題吧…? 07/14 00:57
QQ29:int* pDest = 0x100;會過嘛? 要轉個型吧 07/14 01:02
liptonbin:轉什麼型? 07/14 01:47
giveatry:我猜*pDest = pattern這行就會死了吧 07/14 02:00
VictorTom:在保護模式的Windows下應該就等著報error了沒錯.... 07/14 02:24
VictorTom:不過真實模式, 甚至是其他device的話應該能work吧?? 07/14 02:25
VictorTom:話說, 這種用途加volatile關鍵字會不會比較好呢@_@" 07/14 02:27
QQ29:int *pDest=(int*)0x100;不過下面對他dereference應該就gg了 07/14 07:34
Ebergies:加個 volatile 比較安全些 07/14 09:57
ledia:加個 volatile 只是不 optimize, 跟安全無關吧 07/14 11:02
Ebergies:因為它目的要測試記憶體, optimize 掉就達不到效果了 07/14 11:03
ledia:我的意思是, 加不加 volatile 都無法解決根本的 access 07/14 11:24
ledia:violation 的問題啦~ 07/14 11:24
ledia:另外, 把資料寫進 memory 有什麼被 optimize 掉的風險嗎? XD 07/14 11:25
ledia:他可還有讀出來呢~ 07/14 11:26
Ebergies:哈哈原來如此, 因為預期他在 real mode... lol 07/14 11:26
Ebergies:只要在外部不可見的都可能被 optimize 07/14 11:28
Ebergies:內部讀出來並沒有可見的使用, 就有風險 07/14 11:28
Ebergies:但剛實測了一下, 還是會寫 07/14 11:29
QQ29:請問樓上 怎麼讓他不會 違規存取呢? 我用VC寫都會error... 07/14 11:33
QQ29:另外也想問 E大所謂的外部不可見 和內部 所描述的是甚麼意思 07/14 11:36
Ebergies:1. 真實模式 2. 函數內外 07/14 14:07
VictorTom:對記憶體單純寫入後讀出的動作, 有可能直接被opt為暫存 07/14 19:12
VictorTom:在reg或是直接從cache拿, 用volatile則保證memory的r/w 07/14 19:12
VictorTom:一定要確實去做; 只是因為原po的case記憶體r/w的範圍也 07/14 19:14
VictorTom:不小, 所以遇上被reg cache起來的機會比較低一些.... 07/14 19:15
VictorTom:第二推有點錯, 應該跟cache無關, 而是直接省略mem的r/w 07/14 19:16
VictorTom:只用reg這樣; 至於mem access violation的問題, 就看 07/14 19:16
VictorTom:原po要怎麼處理real mode的問題, 小弟也好奇想要學習XD 07/14 19:17
QQ29:請問什麼是real mode啊? 07/15 01:13
Celios:Windows下沒機會測到真正記憶 測到的都是OS定給你的 OS還會 07/16 22:01
Celios:再轉換 還有很多記憶體位置 OS是做很多其他事的 不可能讓你 07/16 22:02
Celios:亂搞 要測真正記憶體每個BIT要去DOS下 或是BIOS才有可能 07/16 22:04
Celios:要能windows下測 除非你真的很知道微軟OS搞啥把戲 還有知道 07/16 22:29
Celios:別人不知道的方法 免錢MSDN不用查 查不到的 要錢的MSDN還不 07/16 22:31
Celios:一定有方法 07/16 22:32
UNARYvvv:Win在過去可以透過 \Device\PhysicalMemory 讀寫實體記憶 07/17 01:19
UNARYvvv:很舊的技術了 07/17 01:20