看板 C_and_CPP 關於我們 聯絡資訊
各位先進好, 我想問以下程式碼在 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
james732:1.user mode是0至2G或者0至3G的空間 04/14 11:34
james732:2,3 皆為"是" 04/14 11:35
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)
loveme00835:!! 04/14 11:41
loveme00835:malloc 轉型是不是有問題? 04/14 12:09
謝謝指正! ※ 編輯: tropical72 來自: 180.177.73.222 (04/14 12:10)
purpose:找Windows Internals 5th來看,說不定公開的還比微軟多 04/14 12:14
tropical72:謝謝 purpose 大神再次降臨!! 04/14 12:17
loveme00835:http://codepad.org/5BFn8B9v 希望合用 04/14 12:24
tropical72:XD stdint,integer_is_to_large unknown,謝謝loveme. 04/14 12:34
loveme00835:囧> 我字打錯 04/14 14:17
tropical72:想問是哪個字打錯,我還真查不出來 XD 04/14 14:20
loveme00835:to → too 04/14 14:22
謝謝 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)
loveme00835:其實Boost就有類似的東西, 而且更強大, 不過因為此篇 04/14 14:37
loveme00835:好像是C @.@? 04/14 14:37
tropical72:這篇的確是用C寫的,我再去查查相關說明,感謝協助 :) 04/14 14:47
loveme00835:因為 stdint.h 到 C++0x 才有 XD 04/14 15:42
loveme00835:C99 是 ok 的 04/14 15:49
purpose:search_tatget 函數裡面,用到的識別字太多了 (對我來說) 04/14 16:13
loveme00835:樓上說的是 id 還是 keyword ? 04/14 16:36
purpose:指 id,自己取名的 04/14 16:46
tropical72:p 大意指, 是變數設太多?抑或是有些不必設那麼有義?? 04/15 13:06
purpose:first, ptr, addr, Up, cur_cnt, MAX 只是要看前兩行 04/15 14:45
purpose:就要先查這些名稱的意義跟型態,覺得太多 04/15 14:46
purpose:別在意,是我的問題 04/15 14:46