Changeset 287510 in webkit for trunk/Source/JavaScriptCore/disassembler/X86Disassembler.cpp
- Timestamp:
- Jan 2, 2022, 12:20:28 AM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/disassembler/X86Disassembler.cpp
r261755 r287510 27 27 #include "Disassembler.h" 28 28 29 #if ENABLE( UDIS86)29 #if ENABLE(ZYDIS) 30 30 31 31 #include "MacroAssemblerCodeRef.h" 32 #include " UDis86Disassembler.h"32 #include "Zydis.h" 33 33 34 34 namespace JSC { … … 36 36 bool tryToDisassemble(const MacroAssemblerCodePtr<DisassemblyPtrTag>& codePtr, size_t size, const char* prefix, PrintStream& out) 37 37 { 38 return tryToDisassembleWithUDis86(codePtr, size, prefix, out); 38 ZydisDecoder decoder; 39 ZydisDecoderInit(&decoder, ZYDIS_MACHINE_MODE_LONG_64, ZYDIS_ADDRESS_WIDTH_64); 40 41 ZydisFormatter formatter; 42 ZydisFormatterInit(&formatter, ZYDIS_FORMATTER_STYLE_ATT); 43 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_FORCE_SIZE, ZYAN_TRUE); 44 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_HEX_UPPERCASE, ZYAN_FALSE); 45 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_ADDR_PADDING_ABSOLUTE, ZYDIS_PADDING_DISABLED); 46 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_ADDR_PADDING_RELATIVE, ZYDIS_PADDING_DISABLED); 47 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_DISP_PADDING, ZYDIS_PADDING_DISABLED); 48 ZydisFormatterSetProperty(&formatter, ZYDIS_FORMATTER_PROP_IMM_PADDING, ZYDIS_PADDING_DISABLED); 49 50 const auto* data = codePtr.dataLocation<unsigned char*>(); 51 ZyanUSize offset = 0; 52 ZydisDecodedInstruction instruction; 53 char formatted[1024]; 54 while (ZYAN_SUCCESS(ZydisDecoderDecodeBuffer(&decoder, data + offset, size - offset, &instruction))) { 55 if (ZYAN_SUCCESS(ZydisFormatterFormatInstruction(&formatter, &instruction, formatted, sizeof(formatted), bitwise_cast<unsigned long long>(data + offset)))) 56 out.printf("%s%#16llx: %s\n", prefix, static_cast<unsigned long long>(bitwise_cast<uintptr_t>(data + offset)), formatted); 57 else 58 out.printf("%s%#16llx: failed-to-format\n", prefix, static_cast<unsigned long long>(bitwise_cast<uintptr_t>(data + offset))); 59 offset += instruction.length; 60 } 61 62 return true; 39 63 } 40 64 41 65 } // namespace JSC 42 66 43 #endif // ENABLE( UDIS86)67 #endif // ENABLE(ZYDIS)
Note:
See TracChangeset
for help on using the changeset viewer.