gpt4 book ai didi

assembly - .STACK 未在 MASM 中分配正确的大小

转载 作者:行者123 更新时间:2023-12-04 01:29:43 24 4
gpt4 key购买 nike

基于 Microsoft MASM Documentation , .STACK指令的用法是

When used with .MODEL, defines a stack segment (with segment name STACK). The optional size specifies the number of bytes for the stack (default 1,024). The .STACK directive automatically closes the stack statement. (32-bit MASM only.)

为了实验,我制作了 .STACK 以分配 1,073,741,824 字节 (1 GB)

请注意,我在 Visual Studio 2013 控制台项目中运行代码。

.586

.MODEL FLAT

.STACK 1073741824

.DATA
a DWORD 50
b DWORD 55

.CODE
main PROC
addLoop: mov eax, a
push eax
mov eax, 0
mov ebx, b
push ebx
jmp addLoop
RET
main ENDP

END

代码会溢出堆栈。我所做的是记下 ESP 寄存器的第一个地址,让代码运行直到溢出,并将最后的 ESP 从第一个中减去得到堆栈的大小。

在我的上下文中,它是 00DAFEE4 - 00CB3000 + 1 = 000FCEE5。只有 1036005 字节(~1 MB)

为什么???

最佳答案

不管文档怎么说,.STACK 指令在创建 32 位 PECOFF 目标文件时没有做任何有用的事情。它所做的只是创建一个名为 STACK 的空部分,而不考虑给定的大小。该指令仅用于创建 16 位代码。

您可以使用 /STACK 而不是使用 .STACK 指令链接器选项。您应该能够在 Visual Studio IDE 的项目属性页 -> 链接器 -> 系统 -> 堆栈保留大小中设置此选项。

关于assembly - .STACK 未在 MASM 中分配正确的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com