Exception x86 32位保护模式:从调用堆栈读取?

Exception x86 32位保护模式:从调用堆栈读取?,exception,assembly,x86,interrupt,Exception,Assembly,X86,Interrupt,如何从调用堆栈中获取地址?我正在编写一个异常处理程序,我想让它显示CPU是否发生异常?从intel.com或amd.com获取一份CPU手册。查阅有关中断和异常处理的章节。查找显示中断或异常发生时堆栈内容的图表。例如,1986年英特尔80386程序员参考手册: Figure 9-5. Stack Layout after Exception of Interrupt WITHOUT PRIVILEGE TRANSITION

如何从调用堆栈中获取地址?我正在编写一个异常处理程序,我想让它显示CPU是否发生异常?

从intel.com或amd.com获取一份CPU手册。查阅有关中断和异常处理的章节。查找显示中断或异常发生时堆栈内容的图表。例如,1986年英特尔80386程序员参考手册:

Figure 9-5.  Stack Layout after Exception of Interrupt 

                           WITHOUT PRIVILEGE TRANSITION

      D  O      31          0                     31          0
      I  F    ╠═══════╦═══════╣                 ╠═══════╦═══════╣
      R       ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║    OLD          ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║    OLD
      E  E    ╠═══════╬═══════╣   SS:ESP        ╠═══════╬═══════╣   SS:ESP
      C  X    ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║     │           ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║     │
      T  P    ╠═══════╩═══════╣<────┘           ╠═══════╩═══════╣<────┘
      I  A    ║  OLD EFLAGS   ║                 ║  OLD EFLAGS   ║
      O  N    ╠═══════╦═══════╣                 ╠═══════╦═══════╣
      N  S    ║▒▒▒▒▒▒▒║OLD CS ║    NEW          ║▒▒▒▒▒▒▒║OLD CS ║
         I    ╠═══════╩═══════╣   SS:ESP        ╠═══════╩═══════╣
       │ O    ║    OLD EIP    ║     │           ║    OLD EIP    ║    NEW
       │ N    ╠═══════════════╣<────┘           ╠═══════════════╣   SS:ESP
       │      ║               ║                 ║  ERROR CODE   ║     │
       v                                        ╠═══════════════╣<────┘
                                                ║               ║

              WITHOUT ERROR CODE                 WITH ERROR CODE
图9-5。中断异常后的堆栈布局
无特权转换
D O 31 0 31 0
伊夫╠═══════╦═══════╣                 ╠═══════╦═══════╣
R║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║    古老的║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║    古老的
E E╠═══════╬═══════╣   特别是╠═══════╬═══════╣   特别是
碳X║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║     │           ║▒▒▒▒▒▒▒║▒▒▒▒▒▒▒║     │

tp╠═══════╩═══════╣非常感谢。这正是我想要的(我仍然是一个有点疯狂的人,哈哈)