[問題] heap and memory layout

看板C_and_CPP (C/C++)作者 (藍影)時間15年前 (2011/04/14 11:26), 編輯推噓6(6017)
留言23則, 4人參與, 最新討論串1/2 (看更多)
各位先進好, 我想問以下程式碼在 os 上觀念問題,手邊作業系統為 win xp sp3 #include <stdio.h> typedef unsigned uint; typedef unsigned char byte; int main() { uint i, val = 0x12345678; byte* ptr = (byte*)&val; for(i=0; i!=sizeof(uint)/sizeof(byte); ++i; ++ptr) printf("%02x ", *ptr); return 0; } Q1 :xp 在 memory layout 之 user-mode 為 0x0001 0000~0x7fff ffff 還是 0x0001 0000 ~ 0x7fff effff ? 這部份微軟是否有文件可查? ( 約 2G) Q2 :是否所有應用程式(不含 driver, kernel) 都在 user-mode 下? Q3 :上述若為 uint *val = (uint*)malloc(sizeof(uint)); *val = 0x12345678; val 所指之位置是否也保證於 user-mode? 謝謝各位不吝指教! -- YouLoveMe() ? LetItBe() : LetMeFree(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.73.222

04/14 11:34, , 1F
1.user mode是0至2G或者0至3G的空間
04/14 11:34, 1F

04/14 11:35, , 2F
2,3 皆為"是"
04/14 11:35, 2F
http://ppt.cc/PxYd --> user mode: 0x0001 0000~0x7fff ffff, 不知是否我有所誤會. 若 3 為是的話 uint i, *pval = (uint*)malloc(sizeof(uint)); byte* ptr = NULL; *pval = 0x12345678; // ptr = pval; // 故意不這麼寫 ptr = 0x395ec8; // 指向特定位置 (此位置即為 pval 指向位置) printf("%0x\n", *pval); // 以 ptr 去改 0x395ec8 之值 for(i=0; i!=sizeof(uint)/sizeof(byte); ++i, ++ptr) *ptr = ~ (*ptr); // 顯示更改後之值 printf("%0x", *pval); 程式碼中之 ptr 是否會出包? ※ 編輯: tropical72 來自: 180.177.73.222 (04/14 11:45)

04/14 11:41, , 3F
!!
04/14 11:41, 3F

04/14 12:09, , 4F
malloc 轉型是不是有問題?
04/14 12:09, 4F
謝謝指正! ※ 編輯: tropical72 來自: 180.177.73.222 (04/14 12:10)

04/14 12:14, , 5F
找Windows Internals 5th來看,說不定公開的還比微軟多
04/14 12:14, 5F

04/14 12:17, , 6F
謝謝 purpose 大神再次降臨!!
04/14 12:17, 6F

04/14 12:24, , 7F
04/14 12:24, 7F

04/14 12:34, , 8F
XD stdint,integer_is_to_large unknown,謝謝loveme.
04/14 12:34, 8F

04/14 14:17, , 9F
囧> 我字打錯
04/14 14:17, 9F

04/14 14:20, , 10F
想問是哪個字打錯,我還真查不出來 XD
04/14 14:20, 10F

04/14 14:22, , 11F
to → too
04/14 14:22, 11F
謝謝 loveme00835, stdint.h 並不存在於 vc (手邊+爬文,6.0 2003 2008 均無) http://ppt.cc/PC;_ 照著加也無法正常執行 最後換到 dev-c 便可正常使用 sample code 做壞事真的沒那麼容易 XD 歷經了一陣指標地獄, 最後放上醜醜的屍體 (卡住) ... http://codepad.org/0QCc3Q4E 謝謝各位這次指教,有空會再翻翻書看相關說明的。 ※ 編輯: tropical72 來自: 180.177.73.222 (04/14 14:46)

04/14 14:37, , 12F
其實Boost就有類似的東西, 而且更強大, 不過因為此篇
04/14 14:37, 12F

04/14 14:37, , 13F
好像是C @.@?
04/14 14:37, 13F

04/14 14:47, , 14F
這篇的確是用C寫的,我再去查查相關說明,感謝協助 :)
04/14 14:47, 14F

04/14 15:42, , 15F
因為 stdint.h 到 C++0x 才有 XD
04/14 15:42, 15F

04/14 15:49, , 16F
C99 是 ok 的
04/14 15:49, 16F

04/14 16:13, , 17F
search_tatget 函數裡面,用到的識別字太多了 (對我來說)
04/14 16:13, 17F

04/14 16:36, , 18F
樓上說的是 id 還是 keyword ?
04/14 16:36, 18F

04/14 16:46, , 19F
指 id,自己取名的
04/14 16:46, 19F

04/15 13:06, , 20F
p 大意指, 是變數設太多?抑或是有些不必設那麼有義??
04/15 13:06, 20F

04/15 14:45, , 21F
first, ptr, addr, Up, cur_cnt, MAX 只是要看前兩行
04/15 14:45, 21F

04/15 14:46, , 22F
就要先查這些名稱的意義跟型態,覺得太多
04/15 14:46, 22F

04/15 14:46, , 23F
別在意,是我的問題
04/15 14:46, 23F
文章代碼(AID): #1DfcbtVH (C_and_CPP)
文章代碼(AID): #1DfcbtVH (C_and_CPP)