作者:
unixxxx (皓皓)
2015-01-23 17:11:35把 整數 5 存到 0x00123456這個記憶體位址 並用指標指向它
請問該怎麼把值存到指定的記憶體位址裡?!
int *a;
a=00123456;
*a=5;
原本是這樣打 可是編譯過不了 他不會把00123456當做記憶體位址
應該要怎麼改?!
作者:
wenyonba (射後不理很XX啊!!!!)
2015-01-23 18:29:00一定不行啊,你怎麼知道這位址是哪,有沒有其他資源佔用一定要由 OS 分配給你
作者: epithet (epithet) 2015-01-23 19:13:00
int *logicalAddr = reinterpret_cast<int *>(42798);
作者:
carylorrk (carylorrk)
2015-01-23 19:40:00只有我覺得是那個 0 開頭的關係嗎XDD
作者:
wenyonba (射後不理很XX啊!!!!)
2015-01-23 21:20:00直接 reinterpret_cast 過去會發生什麼事 ?_?
作者: epithet (epithet) 2015-01-23 22:46:00
會把 42798 存進記憶體裡面,一段該代表變數的位置裡。
作者:
L4ys (Lays)
2015-01-24 00:05:00應該要寫 a=0x00123456; 應該會直接segmentation fault啦這個記憶體位置通常不可寫
給你個提示,在保護模式下,所有程式拿到的記憶體都是相對位置,只有kernel space(linux)跟Ring1以下(Win)才有機會得到絕對位置
作者:
uranusjr (â†é€™äººæ˜¯è¶…級笨蛋)
2015-01-24 04:08:00單晶片之類的也是有可能會這樣寫啦
作者:
karose (karose)
2015-01-24 09:14:00位址要轉指標便可
作者:
carylorrk (carylorrk)
2015-01-24 17:06:00他也沒有講是不是有 MMU,應該可以預設不用理吧。除非是在寫 kernel,纔會有轉換的問題。
其實早期的確能透過dll共用記憶體位置不過那已經是很早期的windows API行為就是 :P當年不少IPC都是用這種偷吃步的方法實現的
*(int *)ADDRESS = VALUE;不知道上面為什麼扯到好遠的地方去...是L4ys大大耶XDDD 先膜拜 原PO只有漏了"0x" 其他沒錯
作者: jaw109 2015-01-25 14:33:00
除非這位址是os配給你的,否則一定會segmentation fault
作者: tubbysong (song) 2015-01-25 17:41:00
Int *p; p=(int)0x1234 or *p=(int)0x1234
樓上你兩個式子是不同意義喔樓主只是舉個例子,沒有考慮範圍,所以純就問題解答