package org.loon.framework.os;
/**
* Copyright 2008
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*
* @project loonframework
* @author chenpeng
* @email:ceponline@yahoo.com.cn
* @version 0.1
*/
public class ASM {
//PS:不是所有汇编指令都有,有时间再慢慢加,方法是用汇编指令名和操作码自己一个个对……
private transient StringBuffer _ASM_CODE = new StringBuffer();
/**
* 转换16进制byte字符串为byte[]
*
* @param hexString
* @return
*/
final static private byte[] getHexToBytes(final String hexString) {
return getHexToBytes(hexString.getBytes(), 0, hexString.length() >> 1);
}
/**
* 转换16进制byte字符串为byte[]
*
* @param b
* @param offset
* @param len
* @return
*/
final static private byte[] getHexToBytes(final byte[] bytes,
final int offset, final int len) {
byte[] buffer = new byte[len];
for (int i = 0; i < len * 2; i++) {
int shift = i % 2 == 1 ? 0 : 4;
buffer[i >> 1] |= Character.digit((char) bytes[offset + i], 16) << shift;
}
return buffer;
}
/**
* 将指定整形数值转为16进制
*
* @param value
* @return
*/
final static public String getHexToString(final int value) {
String hexString = Integer.toHexString(value & 0xff);
return hexString.length() < 2 ? ("0" + hexString).intern() : hexString;
}
/**
* 获得指定位数的16进制数据
*
* @param value
* @param number
* @return
*/
final static private String getIntToHex(final int value, final int number) {
int size = number > 0 ? number / 2 : 0;
StringBuffer buffer = new StringBuffer();
try {
for (int i = 0; i < size; i++) {
buffer.append(ASM.getHexToString((value >> (i * 8)) & 0xff));
}
return (buffer.toString()).toUpperCase();
} catch (Exception ex) {
return "";
}
}
public void _ADD_EAX(final int address) {
_ASM_CODE.append("05");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EAX_DWORD_PTR(final int address) {
_ASM_CODE.append("0305");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EAX_EDX() {
_ASM_CODE.append("03C2");
}
public void _ADD_EBP_DWORD_PTR(final int address) {
_ASM_CODE.append("032D");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EBX(final int address) {
_ASM_CODE.append("83C3");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EBX_DWORD_PTR(final int address) {
_ASM_CODE.append("031D");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EBX_EAX() {
_ASM_CODE.append("03D8");
}
public void _ADD_ECX(final int address) {
_ASM_CODE.append("83C1");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_EDX(final int address) {
_ASM_CODE.append("83C2");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_ESI(final int address) {
_ASM_CODE.append("83C6");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _ADD_ESP(final int address) {
_ASM_CODE.append("83C4");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _SBB_EAX(final int address) {
_ASM_CODE.append("1D");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _SBB_EAX_EAX() {
_ASM_CODE.append("1BC0");
}
public void _SBB_EBX_EBX() {
_ASM_CODE.append("1BDB");
}
public void _CWD(){
_ASM_CODE.append("99");
}
public void _CALL_DWORD_PTR(final int address) {
_ASM_CODE.append("FF15");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _CALL_DWORD_PTR_EAX() {
_ASM_CODE.append("FF10");
}
public void _CALL_DWORD_PTR_EBX() {
_ASM_CODE.append("FF13");
}
public void _CALL_EAX() {
_ASM_CODE.append("FFD0");
}
public void _CALL_EBP() {
_ASM_CODE.append("FFD5");
}
public void _CALL_EBX() {
_ASM_CODE.append("FFD3");
}
public void _CALL_ECX() {
_ASM_CODE.append("FFD1");
}
public void _CALL_EDI() {
_ASM_CODE.append("FFD7");
}
public void _CALL_EDX() {
_ASM_CODE.append("FFD2");
}
public void _CALL_ESI() {
_ASM_CODE.append("FFD2");
}
public void _CALL_ESP() {
_ASM_CODE.append("FFD4");
}
public void _CMP_DWORD_PTR_EAX(final int address) {
_ASM_CODE.append("3905");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _CMP_EAX(final int address) {
if (address <= 0xff) {
_ASM_CODE.append("83F8");
_ASM_CODE.append(ASM.getIntToHex(address, 2));
} else {
_ASM_CODE.append("3D");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
}
public void _CMP_EAX_DWORD_PTR(final int address) {
_ASM_CODE.append("3B05");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _CMP_EAX_EDX() {
_ASM_CODE.append("3BC2");
}
public void _DEC_EAX() {
_ASM_CODE.append("48");
}
public void _DEC_EBX() {
_ASM_CODE.append("4B");
}
public void _DEC_ECX() {
_ASM_CODE.append("49");
}
public void _DEC_EDX() {
_ASM_CODE.append("4A");
}
public void _EM() {
_ASM_CODE.append("FFFF");
}
public void _XOR_EAX_EAX() {
_ASM_CODE.append("33C0");
}
public void _XOR_EDX_EDX(){
_ASM_CODE.append("33D2");
}
public void _IDIV_EAX() {
_ASM_CODE.append("F7F8");
}
public void _IDIV_EBX() {
_ASM_CODE.append("F7FB");
}
public void _IDIV_ECX() {
_ASM_CODE.append("F7F9");
}
public void _IDIV_EDX() {
_ASM_CODE.append("F7FA");
}
public void _IMUL_EAX(final int address) {
_ASM_CODE.append("6BC0");
_ASM_CODE.append(ASM.getIntToHex(address, 2));
}
public void _IMUL_EAX_EBX(){
_ASM_CODE.append("0FAFC3");
}
public void _IMUL_EAX_EDX() {
_ASM_CODE.append("0FAFC2");
}
public void _IMULB_EAX(final int address) {
_ASM_CODE.append("69C0");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
public void _IN_AL_DX() {
_ASM_CODE.append("EC");
}
public void _INC_DWORD_PTR_EAX() {
_ASM_CODE.append("FF00");
}
public void _INC_DWORD_PTR_EBX() {
_ASM_CODE.append("FF03");
}
public void _INC_DWORD_PTR_ECX() {
_ASM_CODE.append("FF01");
}
public void _INC_DWORD_PTR_EDX() {
_ASM_CODE.append("FF02");
}
public void _INC_EAX() {
_ASM_CODE.append("40");
}
public void _INC_EBX() {
_ASM_CODE.append("43");
}
public void _INC_ECX() {
_ASM_CODE.append("41");
}
public void _INC_EDI() {
_ASM_CODE.append("47");
}
public void _INC_EDX() {
_ASM_CODE.append("42");
}
public void _INC_ESI() {
_ASM_CODE.append("46");
}
public void JMP_EAX() {
_ASM_CODE.append("FFE0");
}
public void _LEA_EAX_DWORD_PTR_EAX_ADD(final int address) {
if (address <= 0xff) {
_ASM_CODE.append("8D40");
_ASM_CODE.append(ASM.getIntToHex(address, 2));
} else {
_ASM_CODE.append("8D80");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
}
public void _LEA_EAX_DWORD_PTR_EBP_ADD(final int address) {
if (address <= 0xff) {
_ASM_CODE.append("8D4424");
_ASM_CODE.append(ASM.getIntToHex(address, 2));
} else {
_ASM_CODE.append("8D8424");
_ASM_CODE.append(ASM.getIntToHex(address, 8));
}
}
public void _LEA_EAX_DWORD_PTR_EBX_ADD(final int address) {
if (address <= 0xff) {
_ASM_CODE.append("8D43");
_ASM_CODE.append(ASM.getIntToHex(address, 2));
} else {
_ASM_CODE.append("8D83");
_ASM_
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
LocalOS.rar (9个子文件)
LocalOS
LocalOS.dll 56KB
META-INF
MANIFEST.MF 39B
REFACTORINGS.XML 82B
org
loon
test
TestASM.java 3KB
TestASM.class 2KB
framework
os
ASM.class 33KB
Kernel.java 3KB
Kernel.class 943B
ASM.java 35KB
共 9 条
- 1
liwulin0506
- 粉丝: 669
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0