0EEDFADE是Delphi内部异常代码,该异常通常有7个参数,我们用的上的是第二个参数,这个参数指向的是Exception的对象,通过这个对象,我们就可以查出异常的一些信息。
以Delphi XE2为例,Class name的偏移为(不同的版本偏移有所不同):
x86_vmtClassName = -56(0x38); |
我们可以用如下命令获取相关信息:
x86: da poi(poi(exception_object)-38)+1;du /c 100 poi(exception_object+4) |
以上命令就能获取异常的类名,而exception_object+sizeof(pointer)则是Exception Message的所在偏移,这是一个unicode string。实际效果如下:
0:002> da poi(poi(003a2800)-38)+1;du /c 100 poi(003a2800 +4) |
当然,我们也可以设置event filter去截获异常:
x86: sxe -c "da poi(poi(poi(@ebp+1c))-38)+1;du /c 100 poi(poi(@ebp+1c)+4)" 0EEDFADE |