【发布时间】:2009-04-19 10:01:16
【问题描述】:
Raymond Chen 有一个帖子,he tells how bad IsBadXxxPtr function is by eating guard page exception。
我不太明白它是如何应用于 Delphi 的。通常应该由谁以及如何(即不调用 IsBadXxxPtr)处理此异常? 我知道 Delphi 插入了一个代码,它(例如)访问大型静态数组的内存 - 正是因为这个原因:扩展堆栈。
但是如果出现保护页面异常:谁将在 Delphi 应用程序中处理它?我不能以不适当的方式使用 try/except 来不小心弄乱它吗? Delphi 的调试器会通知我这些异常吗?
【问题讨论】:
-
备份一下。你需要调用 IsBadXXXPtr 函数之一做什么?
-
我不需要任何 IsBadXXXPtr(我同意 Raymond - 在这些情况下最好崩溃)。我刚刚发现我不知道,这种情况在 Delphi 中是如何处理的。这就是我问的原因——只是出于好奇。
-
在访问大型静态数组时,您“知道”Delphi 插入哪些代码来扩展堆栈?我从来没有见过这样的东西。
-
只需在 Button1Click 的局部变量中声明一个大数组。运行您的应用程序并在 Button1Click 的“开始”行设置断点。单击按钮并带上 CPU 调试器,您会看到如下内容: L1: add esp, XXX push eax dec eax jnz L1 就是这样。这个循环遍历你的数组并触及它。