mirror of https://github.com/minexew/Shrine.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
471 lines
6.5 KiB
471 lines
6.5 KiB
asm { |
|
_MEMSET:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
CLD |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
REP_STOSB |
|
MOV RAX,RDI |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_MEMSET_U16:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
CLD |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
REP_STOSW |
|
MOV RAX,RDI |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_MEMSET_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
CLD |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
REP_STOSD |
|
MOV RAX,RDI |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_MEMSET_I64:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
CLD |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
REP_STOSQ |
|
MOV RAX,RDI |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_MEMCPY:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
PUSH RDI |
|
CLD |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RSI,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
REP_MOVSB |
|
MOV RAX,RDI |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET1 24 |
|
_MEMCMP:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
PUSH RDI |
|
CLD |
|
MOV RSI,U64 SF_ARG1[RBP] |
|
MOV RDI,U64 SF_ARG2[RBP] |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
XOR RAX,RAX |
|
REPE_CMPSB |
|
JZ @@05 |
|
MOV AL,1 |
|
JA @@05 |
|
MOV RAX,-1 |
|
@@05: POP RDI |
|
POP RSI |
|
POP RBP |
|
RET1 24 |
|
_BEQU:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
XOR RAX,RAX |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RBX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
TEST RDX,RDX |
|
JZ @@5 |
|
BTS U64 [RBX],RCX |
|
JMP @@10 |
|
@@5: BTR U64 [RBX],RCX |
|
@@10: ADC AL,0 |
|
POP RBP |
|
RET1 24 |
|
_LBEQU:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
XOR RAX,RAX |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RBX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
TEST RDX,RDX |
|
JZ @@5 |
|
LOCK |
|
BTS U64 [RBX],RCX |
|
JMP @@10 |
|
@@5: LOCK |
|
BTR U64 [RBX],RCX |
|
@@10: ADC AL,0 |
|
POP RBP |
|
RET1 24 |
|
_CLAMP_I64:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RAX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
CMP RAX,RCX |
|
CMOVL RAX,RCX |
|
CMP RAX,RDX |
|
CMOVG RAX,RDX |
|
POP RBP |
|
RET1 24 |
|
_CLAMP_U64:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RAX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
CMP RAX,RCX |
|
CMOVB RAX,RCX |
|
CMP RAX,RDX |
|
CMOVA RAX,RDX |
|
POP RBP |
|
RET1 24 |
|
_CALL:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RAX,U64 SF_ARG1[RBP] |
|
TEST RAX,RAX |
|
JZ @@05 |
|
CALL RAX |
|
@@05: POP RBP |
|
RET1 8 |
|
_BIT_FIELD_OR_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RBX,U64 SF_ARG2[RBP] |
|
SHR RBX,3 |
|
ADD RBX,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
AND CL,7 |
|
SHL RAX,CL |
|
OR U64 [RBX],RAX |
|
POP RBP |
|
RET1 24 |
|
_BIT_FIELD_EXT_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RBX,U64 SF_ARG2[RBP] |
|
MOV RCX,RBX |
|
SHR RBX,3 |
|
ADD RBX,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 [RBX] |
|
AND CL,7 |
|
SHR RDX,CL |
|
MOV RCX,U64 SF_ARG3[RBP] |
|
MOV RAX,1 |
|
SHL RAX,CL |
|
DEC RAX |
|
AND RAX,RDX |
|
POP RBP |
|
RET1 24 |
|
_XCHG_I64:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
XCHG U64 [RDX],RAX |
|
POP RBP |
|
RET1 16 |
|
_XCHG_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV EAX,U32 SF_ARG2[RBP] |
|
XCHG U32 [RDX],EAX |
|
POP RBP |
|
RET1 16 |
|
_XCHG_U16:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOVZX RAX,U16 SF_ARG2[RBP] |
|
XCHG U16 [RDX],AX |
|
POP RBP |
|
RET1 16 |
|
_XCHG_U8:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOVZX RAX,U8 SF_ARG2[RBP] |
|
XCHG U8 [RDX],AL |
|
POP RBP |
|
RET1 16 |
|
|
|
_LXCHG_I64:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV RAX,U64 SF_ARG2[RBP] |
|
LOCK |
|
XCHG U64 [RDX],RAX |
|
POP RBP |
|
RET1 16 |
|
_LXCHG_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV EAX,U32 SF_ARG2[RBP] |
|
LOCK |
|
XCHG U32 [RDX],EAX |
|
POP RBP |
|
RET1 16 |
|
_LXCHG_U16:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOVZX RAX,U16 SF_ARG2[RBP] |
|
LOCK |
|
XCHG U16 [RDX],AX |
|
POP RBP |
|
RET1 16 |
|
_LXCHG_U8:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOVZX RAX,U8 SF_ARG2[RBP] |
|
LOCK |
|
XCHG U8 [RDX],AL |
|
POP RBP |
|
RET1 16 |
|
_REP_IN_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_INSD |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_REP_IN_U16:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_INSW |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_REP_IN_U8:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RDI |
|
MOV RDI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_INSB |
|
POP RDI |
|
POP RBP |
|
RET1 24 |
|
_REP_OUT_U32:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
MOV RSI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_OUTSD |
|
POP RSI |
|
POP RBP |
|
RET1 24 |
|
_REP_OUT_U16:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
MOV RSI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_OUTSW |
|
POP RSI |
|
POP RBP |
|
RET1 24 |
|
_REP_OUT_U8:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
MOV RSI,U64 SF_ARG1[RBP] |
|
MOV RDX,U64 SF_ARG3[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] |
|
REP_OUTSB |
|
POP RSI |
|
POP RBP |
|
RET1 24 |
|
_CPUID:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
MOV RAX,U64 SF_ARG1[RBP] |
|
CPUID |
|
MOV RSI,U64 SF_ARG2[RBP] |
|
MOV U64 [RSI],RAX |
|
MOV U64 8[RSI],RBX |
|
MOV U64 16[RSI],RCX |
|
MOV U64 24[RSI],RDX |
|
POP RSI |
|
POP RBP |
|
RET1 16 |
|
_CALL_IND:: //See $LK,"_LAST_FUN",A="MN:_LAST_FUN"$ |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
PUSH RDI |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] //argc |
|
LEA RSI,U64 SF_ARG3[RBP] //argv |
|
SHL RCX,3 |
|
SUB RSP,RCX |
|
MOV RDI,RSP |
|
REP_MOVSB |
|
TEST RDX,RDX |
|
JZ @@05 |
|
|
|
CALL RDX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
|
|
@@05: MOV RCX,U64 SF_ARG2[RBP] //argc |
|
SHL RCX,3 |
|
ADD RSP,RCX |
|
XOR RAX,RAX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
_CALLEXTNUM:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
PUSH RDI |
|
MOV RDX,U64 SF_ARG1[RBP] |
|
MOV RCX,U64 SF_ARG2[RBP] //argc |
|
LEA RSI,U64 SF_ARG3[RBP] //argv |
|
SHL RCX,3 |
|
SUB RSP,RCX |
|
MOV RDI,RSP |
|
REP_MOVSB |
|
MOV RAX,U64 [SYS_EXTERN_TABLE] |
|
MOV RAX,U64 [RAX+RDX*8] |
|
TEST RAX,RAX |
|
JZ @@05 |
|
|
|
CALL RAX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
|
|
@@05: MOV RCX,U64 SF_ARG2[RBP] //argc |
|
SHL RCX,3 |
|
ADD RSP,RCX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
_CALLEXTSTR:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
PUSH RSI |
|
PUSH RDI |
|
MOV RCX,U64 SF_ARG2[RBP] //argc |
|
LEA RSI,U64 SF_ARG3[RBP] //argv |
|
SHL RCX,3 |
|
SUB RSP,RCX |
|
MOV RDI,RSP |
|
REP_MOVSB |
|
MOV RSI,U64 SF_ARG1[RBP] |
|
|
|
MOV RCX,1 |
|
XOR RAX,RAX |
|
MOV RDI,U64 FS:CTask.hash_table[RAX] |
|
MOV RBX,HTT_FUN|HTT_EXPORT_SYS_SYM |
|
CALL SYS_HASH_FIND |
|
JZ @@15 |
|
|
|
TEST U32 CHash.type[RAX],HTT_FUN |
|
JZ @@05 |
|
MOV RAX,U64 CHashFun.exe_addr[RAX] |
|
JMP @@10 |
|
@@05: MOV RAX,U64 CHashExport.val[RAX] |
|
@@10: TEST RAX,RAX |
|
JZ @@15 |
|
|
|
CALL RAX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
|
|
@@15: MOV RCX,U64 SF_ARG2[RBP] //argc |
|
SHL RCX,3 |
|
ADD RSP,RCX |
|
POP RDI |
|
POP RSI |
|
POP RBP |
|
RET |
|
SET_GS_BASE:: |
|
PUSH RAX |
|
PUSH RCX |
|
PUSH RDX |
|
MOV RDX,RAX |
|
SHR RDX,32 |
|
MOV ECX,IA32_GS_BASE |
|
WRMSR |
|
POP RDX |
|
POP RCX |
|
POP RAX |
|
RET |
|
SET_FS_BASE:: |
|
PUSH RAX |
|
PUSH RCX |
|
PUSH RDX |
|
MOV RDX,RAX |
|
SHR RDX,32 |
|
MOV ECX,IA32_FS_BASE |
|
WRMSR |
|
POP RDX |
|
POP RCX |
|
POP RAX |
|
_RET:: |
|
RET |
|
_SET_MSR:: |
|
PUSH RBP |
|
MOV RBP,RSP |
|
MOV RAX,SF_ARG2[RBP] |
|
MOV RDX,RAX |
|
SHR RDX,32 |
|
MOV RCX,SF_ARG1[RBP] |
|
WRMSR |
|
POP RBP |
|
RET1 16 |
|
_SYS_HLT:: |
|
CLI |
|
@@05: HLT |
|
JMP @@05 |
|
}
|
|
|