- 论坛徽章:
- 0
|
测试异常用的函数:
void CTrap::test_trap(UNUSED int n)
{
int a = 3, b = -1;
*(int *)0x2 = 3; 页表中只初始化了3G~4G的项,用bochs模拟32M内存,
*(int *)0x40000020 = 3; 但是这两个地址赋值都没有引起异常,为什么?
b += 1;
a /= b; 除零异常在下面的反汇编中没有看到,被ignore了?
__asm__ __volatile__("ud2a"); 无效指令:正常,可以陷入到异常
}
|
objdump得到输出:
c0104d8c <_ZN5CTrap9test_trapEi>:
c0104d8c: c7 05 02 00 00 00 03 movl $0x3,0x2
c0104d93: 00 00 00
c0104d96: c7 05 20 00 00 40 03 movl $0x3,0x40000020
c0104d9d: 00 00 00
c0104da0: 0f 0b ud2a
c0104da2: c3 ret
c0104da3: 90 nop
编译选项如下:
GENERAL_FLAGS = -nostdlib -nostdinc -nostartfiles -nodefaultlibs \
-fno-rtti -fno-exceptions -fomit-frame-pointer \
-Wall -Wextra -O2 -D__KERNEL__ -g -ggdb
[ 本帖最后由 jinglexy 于 2007-11-12 09:53 编辑 ] |
|