【问题标题】:Does the .data section gets loaded into memory?.data 部分是否被加载到内存中?
【发布时间】:2015-03-10 21:48:35
【问题描述】:

我尝试了以下测试来查看程序执行时 .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

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

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

【问题讨论】:

  • 查找“需求分页”。

标签: windows assembly x86 nasm portable-executable


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 2012-11-17
    相关资源
    最近更新 更多