vmx86thread.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 101 行

JAVA
101
字号
/*
 * $Id: VmX86Thread.java,v 1.3 2003/12/24 06:45:49 epr Exp $
 */
package org.jnode.vm.x86;

import org.jnode.util.NumberUtils;
import org.jnode.vm.Address;
import org.jnode.vm.VmThread;

/**
 * Thread implementation for Intel X86 processor.
 * 
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class VmX86Thread extends VmThread {

	// State when not running
	volatile int eax;
	volatile int ebx;
	volatile int ecx;
	volatile int edx;
	volatile int esi;
	volatile int edi;
	volatile int eflags;
	volatile Address eip;
	volatile Address esp;
	volatile Address ebp;
	
	// State upon last system exception
	volatile int exEax;
	volatile int exEbx;
	volatile int exEcx;
	volatile int exEdx;
	volatile int exEsi;
	volatile int exEdi;
	volatile int exEflags;
	volatile int exEip;
	volatile int exEsp;
	volatile int exEbp;
	volatile int exCr2;
	
	/**
	 * 
	 */
	VmX86Thread() {
		super();
	}

	/**
	 * @param javaThread
	 */
	public VmX86Thread(Thread javaThread) {
		super(javaThread);
	}

	
	/**
	 * Gets the most current stackframe of this thread.
	 * @return Stackframe 
	 */
	protected Address getStackFrame() {
		return ebp;
	}
	
	/**
	 * Gets the most current instruction pointer of this thread.
	 * This method is only valid when this thread is not running.
	 * @return IP 
	 */
	protected Address getInstructionPointer() {
		return eip;
	}

	/**
	 * Calculate the end of the stack. 
	 * @param stack
	 * @param stackSize
	 * @return End address of the stack
	 */
	protected Address getStackEnd(Object stack, int stackSize) {
		return Address.add(Address.valueOf(stack), STACK_OVERFLOW_LIMIT);
	}
	
	/**
	 * Gets a human readable representation of the system exception state.
	 * @return String
	 */
	public String getReadableErrorState() {
		return "EAX " +NumberUtils.hex(exEax) +
			" EBX " +NumberUtils.hex(exEbx) +
			" ECX " +NumberUtils.hex(exEcx) +
			" EDX " +NumberUtils.hex(exEdx) +
			" ESI " +NumberUtils.hex(exEsi) +
			" EDI " +NumberUtils.hex(exEdi) +
			" ESP " +NumberUtils.hex(exEsp) +
			" EIP " +NumberUtils.hex(exEip) +
			" CR2 " +NumberUtils.hex(exCr2) +
			" EFLAGS " +NumberUtils.hex(exEflags);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?