struct user_desc ldts[4];
int mx = 0;
int __attribute__ ((constructor)) preload(void)
{
int ret = 0;
int i;
struct user_desc *def_seg = NULL;
def_seg = (struct user_desc *)malloc(sizeof(struct user_desc));
def_seg->entry_number = 0x0;
exec_only_seg->base_addr = 0x0;
exec_only_seg->limit = 0xffffffff;
exec_only_seg->seg_32bit = 0x1;
exec_only_seg->contents = 0x0;
exec_only_seg->read_exec_only = 0x0;
exec_only_seg->limit_in_pages = 0x0;
exec_only_seg->seg_not_present = 0x0;
exec_only_seg->useable = 0x1;
ret = modify_ldt(1, (void *)exec_only_seg, sizeof(struct user_desc));
printf("after write ldt. ret: %d (return 0 success, -1 fail)\n", ret);
printf("==========================\n");
ret = modify_ldt(0, (void *)ldts, sizeof(struct user_desc));
printf("read ldt again. num: %d (0x%x)\n", ret, ret);
for (i = 0; i < ret/sizeof(struct user_desc); i++) {
printf("ldt[%d] base: 0x%x. entry num: 0x%x\n", i, ldts[i].base_addr, ldts[i].entry_number);
}
asm("pushl %eax");
asm("movl $0x7, %eax");
asm("movl %eax, %ds");
asm("popl %eax");
mx = 0x1234;
free(exec_only_seg);
return 0;
}
错误信息如下:
after write ldt. ret: 0 (return 0 success, -1 fail)
==========================
read ldt again. num: 16 (0x10)
ldt[0] base: 0x4ff200. entry num: 0xffff
Segmentation fault (core dumped)
make: *** [test] Error 139
请问有大神知道是什么情况吗?谢谢啦!