gpt4 book ai didi

clr - 为什么具有 PE​​Verified 堆栈溢出场景 (maxstack) 的程序不会使 CLR 崩溃?

转载 作者:行者123 更新时间:2023-12-02 02:43:57 26 4
gpt4 key购买 nike

我可以编写、编译并成功运行以下 IL 程序,并将 .maxstack 大小设置为 1,该值太低,因为该程序在某个时间点堆栈上有两个值(即 2+2==4) 。该程序不会在 CLR 中崩溃,并以“Hello World”的所有预期输出(后跟数字 4)完成执行。

但是这个程序将(正确地)不会通过 PEVerify,它指出堆栈溢出异常并显示以下消息:

Microsoft (R) .NET Framework PE Verifier. Version 4.0.30319.18020 Copyright (c) Microsoft Corporation. All rights reserved.

[IL]: Error: [C:\tmp\hello.exe : HelloWorld1.Program::Main][offset 0x00000011] Stack overflow. 1 Error(s) Verifying hello.exe

为什么在CLR中不会崩溃?

.assembly extern mscorlib {}
.assembly SampleIL {
.ver 1:0:1:0
}

.class private auto ansi beforefieldinit HelloWorld1.Program
extends [mscorlib]System.Object
{
// Methods
.method private hidebysig static
void Main (
string[] args
) cil managed
{
// Method begins at RVA 0x2050
// Code size 13 (0xd)
.maxstack 1 // **** NOTE THIS LINE *****
.entrypoint

IL_0000: nop
IL_0001: ldstr "hello world"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop

ldc.i4 2
ldc.i4 2
add
call void [mscorlib]System.Console::WriteLine(int32)

IL_000c: ret
} // end of method Program::Main

.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
// Method begins at RVA 0x205e
// Code size 7 (0x7)
.maxstack 8

IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
} // end of method Program::.ctor

} // end of class HelloWorld1.Program

最佳答案

答案来自@RaymondChen的问题评论

通用语言基础设施 (CLI)
分区三
CIL指令集
最终草案,2005 年 4 月

1.7.4 Must provide maxstack

[... snip ... ]
[Note: Maxstack is related to analysis of the program, not to the size of the stack at runtime. It does not specify the maximum size in bytes of a stack frame, but rather the number of items that shall be tracked by an analysis tool. end note]

关于clr - 为什么具有 PE​​Verified 堆栈溢出场景 (maxstack) 的程序不会使 CLR 崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924289/

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