.data部分是否被加载到内存中?

时间:2015-01-13 01:30:50

标签: windows assembly x86 nasm portable-executable

我尝试了以下测试,看看在执行程序时.data部分是否被加载到内存中:

global _start

section .data
    arr times 99999999 DB 0xAF

section .text
_start:
    jmp _start ; prevent process from terminating

汇编和链接:

nasm -f win32 D:\file.asm
link D:\file.obj /OUT:D:\file.exe /ENTRY:start /SUBSYSTEM:CONSOLE

我已执行该程序,结果如下:

enter image description here

正如您所看到的,程序只占用了276 KB的内存,而它有一个大小为99999999字节的数组!

1 个答案:

答案 0 :(得分:1)

大多数系统上的分页模型将导致包含二进制部分的页面不需要某种动态链接,只有在访问时才会加载 - Windows也不例外。因此,.data部分被内存映射为进程内存空间的二进制文件,但在您需要之前实际上并未进行交换。默认情况下,进程监视器仅报告实际存储的内存,但您也可以配置列以显示映像中的所有内存。您可以使用编译器选项来更改分页行为,如果需要,您可以手动重新映射内存(可能将其锁定)。