Module Checkit { Buffer DataMem as Long*10 Return DataMem, 1:=500 ' second Long Print Eval(DataMem, 1)+5100+5=5605 \\ Now we do math executing machine code Buffer Code ExecMem as byte*1024 Address=0 EmbLong(0xb8, 5100) ' mov eax,5100 EmbByteByte(0x83, 0xC0, 5) ' add eax,0x5 EmbByteLong(0x3,0x5, DataMem(1)) ' add eax, [DataMem(1)] EmbLong(0xa3, DataMem(0)) ' mov [DataMem(0)], eax \\ split rem to execute xor eax eax (eax=0) Rem : EmbByte(0x31, 0xC0) ' xor eax, eax Ret() ' Return \\ Try ok { Execute Code ExecMem, 0 } \\If Eax <>0 then we get error, so we read error as Uint() \\ Error read once then change to zero m=Uint(Error) \\ Hex is Print Hexadecimal for unsigned numbers Hex m Print m=5605 Print Error=0, ok=False Print Eval(DataMem, 0)=5605, Eval(DataMem, 0) \\ sub used as Exit here Sub Ret() Return ExecMem, Address:=0xC3 Address++ End Sub Sub EmbByteByte() Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number Address+=3 End Sub Sub EmbByte() Return ExecMem, Address:=Number, Address+1:=Number Address+=2 End Sub Sub EmbLong() Return ExecMem, Address:=Number, Address+1:=Number as Long Address+=5 End Sub Sub EmbByteLong() Return ExecMem, Address:=Number, Address+1:=Number, Address+2:=Number as Long Address+=6 End Sub } CheckIt