Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly .堆栈未在MASM中分配正确的大小_Assembly_Masm_Callstack - Fatal编程技术网

Assembly .堆栈未在MASM中分配正确的大小

Assembly .堆栈未在MASM中分配正确的大小,assembly,masm,callstack,Assembly,Masm,Callstack,基于,可以使用.STACK指令 与.MODEL一起使用时,定义堆栈段(段名为stack)。可选大小指定堆栈的字节数(默认为1024)。.STACK指令自动关闭STACK语句。(仅限32位MASM。) 为了进行实验,我制作了.STACK来分配1073741824字节(1GB) 注意,我正在Visual Studio 2013控制台项目中运行代码。 .586 .MODEL FLAT .STACK 1073741824 .DATA a DWORD 50 b DWORD 55 .CODE mai

基于,可以使用.STACK指令

与.MODEL一起使用时,定义堆栈段(段名为stack)。可选大小指定堆栈的字节数(默认为1024)。.STACK指令自动关闭STACK语句。(仅限32位MASM。)

为了进行实验,我制作了
.STACK
来分配
1073741824字节(1GB)

注意,我正在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字节(~1MB)


为什么?

不管文档怎么说,.STACK指令在创建32位PECOFF对象文件时没有任何用处。它所做的只是创建一个名为STACK的空节,而不管给定的大小如何。本指令仅在创建16位代码时使用


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

在32位模式下,无论您做什么,可能都没有足够的连续可用地址空间来拥有1G堆栈。在32位平面内存模式中,堆栈是在程序开始运行之前由OS加载程序创建的。它的大小是a,默认为。堆栈的具体用途是什么???