Exception x86 32位保护模式:从调用堆栈读取?
如何从调用堆栈中获取地址?我正在编写一个异常处理程序,我想让它显示CPU是否发生异常?从intel.com或amd.com获取一份CPU手册。查阅有关中断和异常处理的章节。查找显示中断或异常发生时堆栈内容的图表。例如,1986年英特尔80386程序员参考手册: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
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╠═══════╩═══════╣非常感谢。这正是我想要的(我仍然是一个有点疯狂的人,哈哈)