Re: [RFC, PATCH 5/24] i386 Vmi code patching

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



* Zachary Amsden ([email protected]) wrote:
> +static void fixup_translation(struct vmi_annotation *a)
> +{
> +	unsigned char *c, *start, *end;
> +	int left;
> +
> +	memcpy(a->nativeEIP, a->translationEIP, a->translation_size);
> +	start = a->nativeEIP;
> +	end = a->nativeEIP + a->translation_size;
> +
> +	for (c = start; c < end;) {
> +		switch(*c) {
> +			case MNEM_CALL_NEAR:
> +				patch_call_site(a, c);
> +				c+=5;
> +				break;
> +
> +			case MNEM_PUSH_I:
> +				c+=5;
> +				break;
> +
> +			case MNEM_PUSH_IB:
> +				c+=2;
> +				break;
> +
> +			case MNEM_PUSH_EAX:
> +			case MNEM_PUSH_ECX:
> +			case MNEM_PUSH_EDX:
> +			case MNEM_PUSH_EBX:
> +			case MNEM_PUSH_EBP:
> +			case MNEM_PUSH_ESI:
> +			case MNEM_PUSH_EDI: 
> +				c+=1;
> +				break;
> +
> +			case MNEM_LEA:
> +				BUG_ON(*(c+1) != 0x64);  /* [--][--]+disp8, %esp */
> +				BUG_ON(*(c+2) != 0x24);  /* none + %esp */
> +				c+=4;
> +				break;
> +
> +			default:
> +				/*
> +				 * Don't printk - it may acquire spinlocks with
> +				 * partially completed VMI translations, causing
> +				 * nuclear meltdown of the core.
> + 				 */
> +				BUG();
> +				return;
> +		}

Why these restrictions?  How do you do int $0x82, for example?

thanks,
-chris
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux