14_內存分配延遲

分配的虛擬內存沒有使用以前 是不會映射物理內存的。web

1 申請區段 目的: 對齊4kb

// 定義一個可讀可寫的區段
#pragma section("data seg", read,write)
// 在區段裏面 定義一個變量 var =1 (這裏是區段第一個變量,因此坑定是 4kb對齊的起始地址)
declspec(allocate("data seg")) DWORD var = 1;

還能夠這樣申請區段並將變量分配進去:ide

#pragma data_seg(".test")
int g_test1 = 5;
int g_test2 = 5;
#pragma data_seg()

#pragma comment(linker, "/SECTION:.test,RW")

int g_another = 5;

結果: g_test1 g_test2 被分配到 .test 段中, g_another  被分配到默認的 .data  段中

2 代碼:

1570502027062

因此這個時候的 程序直接運行結果 不是預計的。 能夠這樣: 使用CE 先查看 如下那個內存數據 ( 也即至關於訪問了;因此會映射);這個時候,繼續第一個 system(pause) 繼而執行go 這個時候 就不會缺頁異常,因此在int20 處理函數裏面就能正確的賦值;這個時候程序輸出就是正常的了函數

3 用處 反調試

運用一樣的道理這裏有兩種利用:ui

  1. 直接看到的代碼卻並非要執行的代碼;spa

  2. 或者須要 訪問如下刷新虛擬內存的映射。刷新代碼區域。3d

相關文章
相關標籤/搜索