在 Windows x86-64 下,发生异常时,有多少内容被推送到 32 位堆栈上?

2023-12-14

In this 这个问题,我给出了一些我已经实现的并行语言的背景知识。编译器生成本机 x86-32 代码。

一个关键的实现决策是为每个函数(调用)从堆中分配堆栈空间。这允许递归直到你用完虚拟机,并为词法范围启用仙人掌堆栈,甚至对于嵌套的并行子项等也是如此。

编译器的代码生成器可以计算函数本身需要多少堆栈空间;这很混乱但很简单,而且它已经做得很好了。操作系统调用的堆栈需求没有问题;我的函数不做任何事情(如果需要,代码会切换到标准“大堆栈”,执行系统调用,然后切换回来)。为了安全地面对异常和异步调用,它向函数所需的堆栈空间添加了一个令人震惊的常量(目前约为 500 字节),旨在覆盖 x86-32 完整的上下文保存,根据 Windows 32 经验进行校准。

这种语言和异步异常处理在 x86-32 系统上都运行良好。我们在 x86-64 系统上运行这个 32 位实现时偶尔会遇到问题。我怀疑异常时堆栈溢出。

问题是,当在 Windows 64 机器上运行我的 32 位实现时,Windows 可以针对(除以零)硬件异常或 StopThread 调用向堆栈推送多少内容?我很担心 Windows 推送完整的 x86-64 上下文,它比 x86-32 上下文大得多。有人知道吗?有没有一个文档可以回答这一章的问题?

我准备进行一些动态实验来看看。


[回答完成;请参阅 Win32 Vista 和 Win64 Wow64 for Windows7 的具体值]

==========================================================================

运行于32位 Windows Vista,使用零除数进行 IDIV,我得到以下值:

EBP@div == x01C00800  // base of heap-allocated stack frame
ESP@div == x01C00FF8  // stack at "top" of allocated stack frame
ESP@entry to SEH  == 0x1C00C30 // ESP measured at first instruction of Structured Exception Handler
ContextOffset[ESP]== 0x1C00D2C // Pointer to context block at entry to SEH

因此,从分割点的 ESP=0x1C00FF8 到推送上下文块的底部,0x1C00FF8-0x1C00D2C = 0x2CC =716字节被推送。从推送上下文块的底部到 SEH 的条目,0x1C00D2C-0x1C00C30 = 0xFC ==252字节被推送。所以appears716+252 = 968 字节被推送(我觉得这很荒谬)。

情况变得更糟。接下来是 SEH 入口处堆栈帧的转储;请注意 0x1C00C30 以下到 0x1C00B78 之间的值(至少请参阅 0x1C00BD8 处的“明显的 Win32 返回地址”0x77c39534)cdcdcdcd;我相信 Windows 已经践行了这些价值观,同时将控制权交给了我的 SEH。即 0x1C00B78-0x1C00C30 = 0xB8 = 184 个额外字节。 (所以,可笑+难以置信)=1152需要字节才能到达 SEH,最小值。 [奇怪的是,由另一个线程执行的 Win32 ThreadStop 似乎会推动nothing在停止的线程堆栈上]

0x01C00800  01b002f0 00000001 cd4b1b19 cdcdcdcd cdcdcdcd 0000000b cdcdcdcd cdcdcdcd  ð.°.......KÍÍÍÍÍÍÍÍÍ....ÍÍÍÍÍÍÍÍ
0x01C00820  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00840  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00860  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00880  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C008A0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C008C0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C008E0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00900  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00920  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00940  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00960  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00980  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C009A0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C009C0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C009E0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00A00  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00A20  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00A40  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00A60  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00A80  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00AA0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00AC0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00AE0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00B00  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00B20  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd ffff0000 cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ..ÿÿÍÍÍÍ
0x01C00B40  00000035 00000034 00000001 cdcdcdcd cdcdcdcd f5f55f5f cdcdcdcd cdcdcdcd  5...4.......ÍÍÍÍÍÍÍÍ__õõÍÍÍÍÍÍÍÍ
0x01C00B60  cdcdcdcd cdcdcdcd ffff0000 cdcdcdcd cdcdcdcd 0190bfa8 52b396ac 52b396ac  ÍÍÍÍÍÍÍÍ..ÿÿÍÍÍÍÍÍÍͨ¿..¬–.R¬–.R
0x01C00B80  cdcdcdcd 0190bfa8 cdcdcdcd 00000011 00000000 01c00d18 cdcdcdcd cdcdcdcd  ÍÍÍͨ¿..ÍÍÍÍ..........À.ÍÍÍÍÍÍÍÍ
0x01C00BA0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00BC0  cdcdcdcd cdcdcdcd 00000000 cdcdcdcd 01c00c30 77c39534 cdcdcdcd 00000011  ÍÍÍÍÍÍÍÍ....ÍÍÍÍ0.À.4.ÃwÍÍÍÍ....
0x01C00BE0  00000000 01c00c30 77c39598 77c395b1 43e4d1f4 00000000 01c00d18 00456c00  ....0.À.˜.Ãw±.ÃwôÑäC......À..lE.
0x01C00C00  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd 00000000 00400000 01c00bf0 cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ......@.ð.À.ÍÍÍÍ
0x01C00C20  0184ff74 77c09aa2 35e18e8c 01c00c50 77c65dd9 01c00d18 0184ff74 01c00d2c  tÿ..¢šÀwŒŽá5P.À.Ù]Æw..À.tÿ..,.À.
0x01C00C40  01c00cec 0184ff74 77c65ded 0184ff74 01c00d00 77c65dab 01c00d18 0184ff74  ì.À.tÿ..í]Æwtÿ....À.«]Æw..À.tÿ..
0x01C00C60  01c00d2c 01c00cec 00456c00 00000000 01c00d18 0184ff74 77c39442 01c00d18  ,.À.ì.À..lE.......À.tÿ..B”Ãw..À.
0x01C00C80  0184ff74 01c00d2c 01c00cec 00456c00 7ffde08c 01c00d18 01b00300 cdcdcdcd  tÿ..,.À.ì.À..lE.Œàý...À...°.ÍÍÍÍ
0x01C00CA0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00CC0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x01C00CE0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd 00000072 01850000 0184c000 00cdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍr........À..ÍÍÍ.
0x01C00D00  01c00800 77c65c37 00c00d18 01c00d2c 01c00d18 01c00d2c c0000094 00000000  ..À.7\Æw..À.,.À...À.,.À.”..À....
0x01C00D20  00000000 023eb44c 00000000 0001003f 00000000 00000000 00000000 00000000  ....L´>.....?...................
0x01C00D40  00000000 00000000 ffff037b ffff2120 ffffffff 02383596 051f001b 02382ecc  ........{.ÿÿ !ÿÿÿÿÿÿ–58.....Ì.8.
0x01C00D60  ffff0023 00000000 c0000000 00004000 00000000 c000c000 00000000 80000000  #.ÿÿ.......À.@.......À.À.......€
0x01C00D80  0000c001 00000000 c0008000 00000000 c0000000 0000c001 00000000 c002e000  .À.......€.À.......À.À.......à.À
0x01C00DA0  00000000 80000000 00003fff 40000000 4010a51c 00000000 00000000 0000003b  .......€ÿ?.....@.¥.@........;...
0x01C00DC0  00000023 00000023 7ffde08c 01b00300 0190bfa8 00000000 00000000 00000063  #...#...Œàý...°.¨¿..........c...
0x01C00DE0  01c00800 023eb44c 0000001b 00010246 01c00ff8 00000023 2120037b 051f0000  ..À.L´>.....F...ø.À.#...{. !....
0x01C00E00  02383596 0000001b 02382ecc 00000023 00001f80 0000ffff 00000000 c0000000  –58.....Ì.8.#...€...ÿÿ.........À
0x01C00E20  00004000 00000000 00000000 c0000000 0000c000 00000000 00000000 80000000  .@.............À.À.............€
0x01C00E40  0000c001 00000000 00000000 80000000 0000c000 00000000 00000000 c0000000  .À.............€.À.............À
0x01C00E60  0000c001 00000000 00000000 e0000000 0000c002 00000000 00000000 80000000  .À.............à.À.............€
0x01C00E80  00003fff 00000000 00000000 a51c4000 00004010 00000000 00000000 00000000  ÿ?...........@.¥.@..............
0x01C00EA0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00EC0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00EE0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00F00  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00F20  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00F40  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00F60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00F80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00FA0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00FC0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x01C00FE0  00000000 00000000 00000000 00000000 00000000 00000000 52b396ac 01c00b78  ........................¬–.Rx.À.


========================================================================================

运行于64位Windows 7,在WOW64下运行32位进程,用零除数进行IDIV,我得到以下值:

EBP@div == x02100800  // base of heap-allocated stack frame
ESP@div == x02100FF8  // stack at "top" of allocated stack frame
ESP@entry to SEH  == 0x02100BD4 // ESP measured at first instruction of Structured Exception Handler
ContextOffset[ESP]== 0x02100D10 // Pointer to context block at entry to SEH

因此,从分割点的 ESP=0x02100FF8 到推送上下文块的底部,0x02100FF8-0x02100D10 = 0x2E8 =744字节被推送(Win32 推送716)。从推送上下文块的底部到 SEH 的条目,0x02100D10-0x02100BD4 = 0x132 ==316字节被推送(Windows32 推送252)。所以appears744+316 = 1060 字节被推送(我发现这比 Win32 推送的荒谬数量还要糟糕)。

情况变得更糟。接下来是 SEH 入口处堆栈帧的转储;请注意 0x02100BD4 以下到 0x021009D8 之间的值(至少请参阅 0x021009D8 处的“明显的 Win32 返回地址”0x77c39534)cdcdcdcd;我相信 Windows 已经践行了这些价值观,同时将控制权交给了我的 SEH。即 0x02100BD4-0x021009D8 = 0x1FC = 508 个额外字节。 (所以,可笑+难以置信)=1568到达 SEH 至少需要字节。

0x02100800  020402f0 00000001 fa0ad4b0 cdcdcdcd cdcdcdcd 0000000b cdcdcdcd cdcdcdcd  ð.......°Ô.úÍÍÍÍÍÍÍÍ....ÍÍÍÍÍÍÍÍ
0x02100820  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100840  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100860  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100880  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x021008A0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x021008C0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x021008E0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100900  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100920  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100940  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100960  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100980  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x021009A0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x021009C0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd 74fce2d9 00000000  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÙâüt....
0x021009E0  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100A00  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd 002bbfc8 00000000 02040300 00000000  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÈ¿+.............
0x02100A20  fffd708c 00000000 77791266 00000000 cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  Œpýÿ....f.yw....ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100A40  cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd cdcdcdcd  ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
0x02100A60  0010001f 00001f80 002b0023 0053002b 002b002b 00010246 00000000 00000000  ....€...#.+.+.S.+.+.F...........
0x02100A80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100AA0  00000000 00000000 00000063 00000000 00000000 00000000 00000000 00000000  ........c.......................
0x02100AC0  002bbfc8 00000000 02100ff8 00000000 02100800 00000000 02040300 00000000  È¿+.....ø.......................
0x02100AE0  fffd708c 00000000 0000002b 00000000 76f612ea 00000000 00000000 00000000  Œpýÿ....+.......ê.öv............
0x02100B00  002fe7e0 00000000 fffd5000 00000000 002ffd20 00000000 002ff170 00000000  àç/......Pýÿ.... ý/.....pñ/.....
0x02100B20  74f32450 00000000 0281b1a4 00000000 2120037b 051f0000 027b359f 00000011  P$ót....¤±......{. !....Ÿ5{.....
0x02100B40  00000000 02100cc0 00001f80 0000ffff 00000000 80000000 00004001 00000000  ....À...€...ÿÿ.........€.@......
0x02100B60  00000000 c0000000 0000c000 00000000 00000000 00000000 00000000 00000000  .......À.À......................
0x02100B80  02100bd8 00000011 00000000 02100bd8 7797b2da 7797b2f3 72982375 00000000  Ø...........Ø...Ú.—wó.—wu#˜r....
0x02100BA0  02100cc0 00456c00 0000c002 00000000 00000000 80000000 00000000 00400000  À....lE..À.............€......@.
0x02100BC0  02100b98 dfb28000 0203ff74 779971d5 071ce70d 02100bf8 7797b459 02100cc0  ˜....€.ßtÿ..Õq™w.ç..ø...Y´—wÀ...
0x02100BE0  0203ff74 02100d10 02100c94 0203ff74 7797b46d 0203ff74 02100ca8 7797b42b  tÿ......”...tÿ..m´—wtÿ..¨...+´—w
0x02100C00  02100cc0 0203ff74 02100d10 02100c94 00456c00 00000000 02100cc0 0203ff74  À...tÿ......”....lE.....À...tÿ..
0x02100C20  7797b3ce 02100cc0 0203ff74 02100d10 02100c94 00456c00 fffd708c 02100cc0  Î.—wÀ...tÿ......”....lE.ŒpýÿÀ...
0x02100C40  02040300 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100C60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100C80  00000000 00000000 00000000 00000000 00000000 00000000 00000072 02040000  ........................r.......
0x02100CA0  0203c000 00000000 02100800 77930133 00100cc0 02100d10 02100cc0 02100d10  .À..........3.“wÀ.......À.......
0x02100CC0  c0000094 00000000 00000000 0281b1a4 00000000 00000000 00000000 00000000  ”..À........¤±..................
0x02100CE0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100D00  00000000 00000000 00000000 00000000 0001003f 00000000 00000000 00000000  ................?...............
0x02100D20  00000000 00000000 00000000 0000037b 00002120 0000ffff 027b359f 051f0023  ............{... !..ÿÿ..Ÿ5{.#...
0x02100D40  027b2ecc 0000002b 00000000 80000000 00004001 00000000 c000c000 00000000  Ì.{.+..........€.@.......À.À....
0x02100D60  80000000 0000c001 00000000 c0008000 00000000 c0000000 0000c001 00000000  ...€.À.......€.À.......À.À......
0x02100D80  c002e000 00000000 80000000 00003fff 80000000 400fdfb2 00000000 0000002b  .à.À.......€ÿ?.....€.ß.@....+...
0x02100DA0  00000053 0000002b 0000002b fffd708c 02040300 002bbfc8 00000000 00000000  S...+...+...Œpýÿ....È¿+.........
0x02100DC0  00000063 02100800 0281b1a4 00000023 00010246 02100ff8 0000002b 2120037b  c.......¤±..#...F...ø...+...{. !
0x02100DE0  051f0000 027b359f 00000023 027b2ecc 0000002b 00001f80 0000ffff 00000000  ....Ÿ5{.#...Ì.{.+...€...ÿÿ......
0x02100E00  80000000 00004001 00000000 00000000 c0000000 0000c000 00000000 00000000  ...€.@.............À.À..........
0x02100E20  80000000 0000c001 00000000 00000000 80000000 0000c000 00000000 00000000  ...€.À.............€.À..........
0x02100E40  c0000000 0000c001 00000000 00000000 e0000000 0000c002 00000000 00000000  ...À.À.............à.À..........
0x02100E60  80000000 00003fff 00000000 00000000 dfb28000 0000400f 00000000 00000000  ...€ÿ?...........€.ß.@..........
0x02100E80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100EA0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100EC0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100EE0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100F00  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100F20  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100F40  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100F60  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100F80  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100FA0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000  ................................
0x02100FC0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 fffffd34  ............................4ýÿÿ
0x02100FE0  000002e4 fffffd34 000002cc 00000019 00000000 00000063 52b396ac 02100b78  ä...4ýÿÿÌ...........c...¬–.Rx...

进入 SEH 的费用最终总结:

  • Windows32 推送 968 字节并丢弃超过该值的 184 字节;除了陷阱处的堆栈之外,您还需要 1152 字节的额外堆栈。
  • Windows64 (WOW64) 推送 1060 字节并丢弃超过该值的 508 字节;除了陷阱处的字节之外,您还需要 1568 字节。

面对Windows对堆栈空间的挥霍使用,定义“小激活记录”方案非常困难。

我猜想 Windows 下的异常处理启动起来一定非常慢;读取和写入所有这些字节需要时间。

我可能会在 Windows8 测试版上再次尝试此操作。我预计会被厌恶。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Windows x86-64 下,发生异常时,有多少内容被推送到 32 位堆栈上? 的相关文章

随机推荐