* @brief Set the register value * * @param GuestRegs * @param RegisterId * @param Value * * @return BOOLEAN */
| 1000 | * @return BOOLEAN |
| 1001 | */ |
| 1002 | BOOLEAN |
| 1003 | SetRegValue(PGUEST_REGS GuestRegs, UINT32 RegisterId, UINT64 Value) |
| 1004 | { |
| 1005 | BOOLEAN Result = TRUE; |
| 1006 | |
| 1007 | switch (RegisterId) |
| 1008 | { |
| 1009 | case REGISTER_RAX: |
| 1010 | GuestRegs->rax = Value; |
| 1011 | |
| 1012 | break; |
| 1013 | |
| 1014 | case REGISTER_EAX: |
| 1015 | GuestRegs->rax = (GuestRegs->rax & UPPER_32_BITS) | (Value & LOWER_32_BITS); |
| 1016 | |
| 1017 | break; |
| 1018 | |
| 1019 | case REGISTER_AX: |
| 1020 | GuestRegs->rax = (GuestRegs->rax & UPPER_48_BITS) | (Value & LOWER_16_BITS); |
| 1021 | |
| 1022 | break; |
| 1023 | |
| 1024 | case REGISTER_AH: |
| 1025 | GuestRegs->rax = (GuestRegs->rax & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS); |
| 1026 | |
| 1027 | break; |
| 1028 | |
| 1029 | case REGISTER_AL: |
| 1030 | GuestRegs->rax = (GuestRegs->rax & UPPER_56_BITS) | (Value & LOWER_8_BITS); |
| 1031 | |
| 1032 | break; |
| 1033 | |
| 1034 | case REGISTER_RCX: |
| 1035 | GuestRegs->rcx = Value; |
| 1036 | |
| 1037 | break; |
| 1038 | case REGISTER_ECX: |
| 1039 | GuestRegs->rcx = (GuestRegs->rcx & UPPER_32_BITS) | (Value & LOWER_32_BITS); |
| 1040 | |
| 1041 | break; |
| 1042 | |
| 1043 | case REGISTER_CX: |
| 1044 | GuestRegs->rcx = (GuestRegs->rcx & UPPER_48_BITS) | (Value & LOWER_16_BITS); |
| 1045 | |
| 1046 | break; |
| 1047 | |
| 1048 | case REGISTER_CH: |
| 1049 | GuestRegs->rcx = (GuestRegs->rcx & UPPER_48_BITS_AND_LOWER_8_BITS) | ((Value << 8) & SECOND_LOWER_8_BITS); |
| 1050 | |
| 1051 | break; |
| 1052 | |
| 1053 | case REGISTER_CL: |
| 1054 | GuestRegs->rcx = (GuestRegs->rcx & UPPER_56_BITS) | (Value & LOWER_8_BITS); |
| 1055 | |
| 1056 | break; |
| 1057 | case REGISTER_RDX: |
| 1058 | GuestRegs->rdx = Value; |
| 1059 |
no test coverage detected