[問題] 把值存到一個指定的記憶體位址

看板C_and_CPP作者 (皓皓)時間9年前 (2015/01/23 17:11), 9年前編輯推噓8(8018)
留言26則, 11人參與, 最新討論串1/1
把 整數 5 存到 0x00123456這個記憶體位址 並用指標指向它 請問該怎麼把值存到指定的記憶體位址裡?! int *a; a=00123456; *a=5; 原本是這樣打 可是編譯過不了 他不會把00123456當做記憶體位址 應該要怎麼改?! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.43.54.141 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1422004298.A.074.html

01/23 18:29, , 1F
一定不行啊,你怎麼知道這位址是哪,有沒有其他資源佔用
01/23 18:29, 1F

01/23 18:29, , 2F
一定要由 OS 分配給你
01/23 18:29, 2F
那這題應該要寫怎麼寫?! ※ 編輯: unixxxx (114.43.54.141), 01/23/2015 18:50:00

01/23 19:02, , 3F
/如何取得系統總記憶體的位置
01/23 19:02, 3F

01/23 19:13, , 4F
int *logicalAddr = reinterpret_cast<int *>(42798);
01/23 19:13, 4F

01/23 19:40, , 5F
只有我覺得是那個 0 開頭的關係嗎XDD
01/23 19:40, 5F

01/23 21:20, , 6F
直接 reinterpret_cast 過去會發生什麼事 ?_?
01/23 21:20, 6F

01/23 22:46, , 7F
會把 42798 存進記憶體裡面,一段該代表變數的位置裡。
01/23 22:46, 7F

01/24 00:05, , 8F
應該要寫 a=0x00123456; 應該會直接segmentation fault啦
01/24 00:05, 8F

01/24 00:06, , 9F
這個記憶體位置通常不可寫
01/24 00:06, 9F

01/24 02:07, , 10F
給你個提示,在保護模式下,所有程式拿到的記憶體都是
01/24 02:07, 10F

01/24 02:08, , 11F
相對位置,只有kernel space(linux)跟Ring1以下(Win)
01/24 02:08, 11F

01/24 02:08, , 12F
才有機會得到絕對位置
01/24 02:08, 12F

01/24 04:08, , 13F
單晶片之類的也是有可能會這樣寫啦
01/24 04:08, 13F

01/24 09:14, , 14F
位址要轉指標便可
01/24 09:14, 14F

01/24 17:06, , 15F
他也沒有講是不是有 MMU,應該可以預設不用理吧。
01/24 17:06, 15F

01/24 17:07, , 16F
除非是在寫 kernel,纔會有轉換的問題。
01/24 17:07, 16F

01/24 21:28, , 17F
其實早期的確能透過dll共用記憶體位置
01/24 21:28, 17F

01/24 21:28, , 18F
不過那已經是很早期的windows API行為就是 :P
01/24 21:28, 18F

01/24 21:28, , 19F
當年不少IPC都是用這種偷吃步的方法實現的
01/24 21:28, 19F

01/24 23:11, , 20F
*(int *)ADDRESS = VALUE;
01/24 23:11, 20F

01/24 23:12, , 21F
不知道上面為什麼扯到好遠的地方去...
01/24 23:12, 21F

01/24 23:13, , 22F
是L4ys大大耶XDDD 先膜拜 原PO只有漏了"0x" 其他沒錯
01/24 23:13, 22F

01/25 14:33, , 23F
除非這位址是os配給你的,否則一定會segmentation fault
01/25 14:33, 23F

01/25 17:41, , 24F
Int *p; p=(int)0x1234 or *p=(int)0x1234
01/25 17:41, 24F

01/26 04:40, , 25F
樓上你兩個式子是不同意義喔
01/26 04:40, 25F

01/26 04:43, , 26F
樓主只是舉個例子,沒有考慮範圍,所以純就問題解答
01/26 04:43, 26F
文章代碼(AID): #1KmX1A1q (C_and_CPP)