您的位置: 旅游网 > 图库 >> 明星写真

操作系统下糟糕的异常处理方式覆盖

发布时间:2021-10-27 05:27:35

看看上面搜索异常处理程序的算法就知道了,有个异常模块表,保存会发生异常时候的eip和异常处理程序指针,发生异常的时候就根据异常时候的eip搜索表里面的eip,发现相等就找到了异常处理指针。这是什么意思呢,就是说你编写的内核程序必须精确的知道哪条指令可能会发生异常,要求真够高的。想想windows下的异常编程是多么轻松?程序员只需要知道哪一段程序可能出现异常,就只需要一个括号一个异常语句保护这段程序就是了。 光看上面算法可能对其这异常的处理还没怎么有感性认识,那么我们再看看其内核的异常形式、编写方式吧。 下面我们再看看t的一些说明: 查看内核模块表: Sections: Idx Name Size VMA LMA File off Algn 0 .text 00098f40 c c 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .fixup 000016bc c0198f40 c0198f40 00099f40 2**0 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 .rodata 0000f127 c019a5fc c019a5fc 0009b5fc 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 __ex_table 000015c0 c01a9724 c01a9724 000aa724 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .data 0000ea58 c01abcf0 c01abcf0 000abcf0 2**4 CONTENTS, ALLOC, LOAD, DATA 5 .bss 00018e21 c01ba748 c01ba748 000ba748 2**2 ALLOC 6 .comment 00000ec4 000ba748 2**0 CONTENTS, READONLY 7 .note 00000ec4 00000ec4 000bb60c 2**0 CONTENTS, READONLY

参观他们的村庄(想象一下你可以查看任意的村庄 看模块__ex_table就是会出现异常的一些程序eip,fixup就是相应的异常处理程序地址。这显然这异常结构是静态的,与windows动态的链表形式有很大的分别。再看看异常程序的编写,下面是get_user(c, buf)的一段代码: switch ((sizeof(*(buf)))) { case 1: __asm__ __volatile__( \"1: mov\" \"b\" \" %2,%\" \"b\" \"1\\n\" /*这语句可能发生异常*/ \"2:\\n\" \".section .fixup,\\\"ax\\\"\\n\" \"3: movl %3,%0\\n\"/*异常处理程序*/ \" xor\" \"b\" \" %\" \"b\" \"1,%\" \"b\" \"1\\n\" \" jmp 2b\\n\" \".section __ex_table,\\\"a\\\"\\n\" \" .align 4\\n\" \" .long 1b,3b\\n\" /*1b,3b就是对应1:,3:就是可能会发生异常的eip与异常后的处理程序 */\".text\" : \"=r\"(__gu_err), \"=q\" (__gu_val): \"m\"((*(struct __large_struct *)( __gu_addr )) ), \"i\"(- 14 ), \"0\"( __gu_err )) ; break;

长沙治疗包皮过长哪家好
痛风性关节炎怎么治
唐山治疗阳痿费用多少钱
猜你会喜欢的
猜你会喜欢的