diff options
Diffstat (limited to 'src/vm/amd64/cgenamd64.cpp')
-rw-r--r-- | src/vm/amd64/cgenamd64.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/vm/amd64/cgenamd64.cpp b/src/vm/amd64/cgenamd64.cpp index 814f04dd9f..2ea4971148 100644 --- a/src/vm/amd64/cgenamd64.cpp +++ b/src/vm/amd64/cgenamd64.cpp @@ -26,6 +26,8 @@ #include "clrtocomcall.h" #endif // FEATURE_COMINTEROP +extern "C" int dprintf(int fd, const char *format, ...); + void UpdateRegDisplayFromCalleeSavedRegisters(REGDISPLAY * pRD, CalleeSavedRegisters * pRegs) { LIMITED_METHOD_CONTRACT; @@ -553,8 +555,26 @@ void emitJump(LPBYTE pBuffer, LPVOID target) _ASSERTE(DbgIsExecutable(pBuffer, 12)); } + + +extern "C" LPVOID ASanCreateWraper2(LPVOID target, void (*push_addr)(LPVOID addr), LPVOID (*pop_addr)()); +extern "C" void my_push_addr_j2n(LPVOID addr); +extern "C" LPVOID my_pop_addr_j2n(); + +void change_my_target(void *old_target, void *new_target) +{ + dprintf(1, "#### change_my_target!!: old_target=%p new_target=%p\n", old_target, new_target); +} + + void UMEntryThunkCode::Encode(BYTE* pTargetCode, void* pvSecretParam) { + dprintf(1, "#### UMEntryThunkCode::Encode: entry_pointer=%p pTargetCode=%p pvSecretParam=%p\n", &m_movR10, pTargetCode, pvSecretParam); + + dprintf(1, "#### UMEntryThunkCode::Encode: target: TheUMEntryPrestub: %d UMThunkStub: %d\n", + pTargetCode == (BYTE *)TheUMEntryPrestub, + pTargetCode == (BYTE *)UMThunkStub + ); CONTRACTL { NOTHROW; @@ -563,6 +583,13 @@ void UMEntryThunkCode::Encode(BYTE* pTargetCode, void* pvSecretParam) } CONTRACTL_END; + { + BYTE *old = pTargetCode; + pTargetCode = (BYTE *)ASanCreateWraper2((LPVOID)pTargetCode, my_push_addr_j2n, my_pop_addr_j2n); + dprintf(1, "#### UMEntryThunkCode::Encode: CHANGE!!! new_pTargetCode=%p\n", pTargetCode); + change_my_target(old, pTargetCode); + } + // padding // CC CC CC CC // mov r10, pUMEntryThunk // 49 ba xx xx xx xx xx xx xx xx // METHODDESC_REGISTER // mov rax, pJmpDest // 48 b8 xx xx xx xx xx xx xx xx // need to ensure this imm64 is qword aligned |