public override EditResult Write(int address, byte[] data, byte[] oriData, LabelCollection labels) { // find a code cave int caveAddress = FindCodeCave(data, address, codeData.Count + 5); if (caveAddress == 0) { return(EditResult.NoHookspace); } // write hook jmpBytes.CopyTo(data, address); int jmpLen = jmpBytes.Length + 4; byte[] buffer = BitConverter.GetBytes(caveAddress - (address + jmpLen)); buffer.CopyTo(data, address + jmpBytes.Length); // fill rest with nops for (int i = jmpLen; i < hookLen; i++) { data[address + i] = 0x90; } // write into code cave codeData.CopyTo(data, caveAddress); // jmp back data[caveAddress + codeData.Count] = 0xE9; // jmpBackLabel address will be resolved by BinRefTo return(base.Write(caveAddress + codeData.Count + 1, data, oriData, labels)); }
public override EditResult Write(int address, byte[] data, byte[] oriData, LabelCollection labels) { // find code cave int caveAddress = FindCodeCave(data, address, editData.Length); if (caveAddress == 0) { return(EditResult.NoHookspace); } // write into code cave editData.CopyTo(data, caveAddress); // write redirection int redirectAddress; if (this.relative) { redirectAddress = caveAddress - (address + 4); } else { redirectAddress = caveAddress + 0x400000; } byte[] buffer = BitConverter.GetBytes(redirectAddress); buffer.CopyTo(data, address); return(EditResult.NoErrors); }
public override EditResult Write(int address, byte[] data, byte[] oriData, LabelCollection labels) { int labelAddress = labels.GetLabel(this.labelName); int refAddress = labelAddress; if (relative) { refAddress -= (address + 4); } byte[] buf = BitConverter.GetBytes(refAddress); buf.CopyTo(data, address); return(EditResult.NoErrors); }
public override EditResult Write(int address, byte[] data, byte[] oriData, LabelCollection labels) { this.address = BitConverter.ToInt32(oriData, address + this.offset); return(EditResult.NoErrors); }
public override EditResult Write(int address, byte[] data, byte[] oriData, LabelCollection labels) { return(EditResult.NoErrors); }