Skip to content

Commit ca27de0

Browse files
committed
DBG: remove custom formatter hooks and use new zydis setting instead
1 parent 63ec6d4 commit ca27de0

File tree

2 files changed

+4
-145
lines changed

2 files changed

+4
-145
lines changed

src/zydis_wrapper/zydis_wrapper.cpp

Lines changed: 3 additions & 144 deletions
Original file line numberDiff line numberDiff line change
@@ -6,143 +6,6 @@ bool Zydis::mInitialized = false;
66
ZydisDecoder Zydis::mDecoder;
77
ZydisFormatter Zydis::mFormatter;
88

9-
static ZydisStatus ZydisFormatterFormatOperandImmIntelCustom(const ZydisFormatter* formatter,
10-
char** buffer, size_t bufferLen, const ZydisDecodedInstruction* instruction,
11-
const ZydisDecodedOperand* operand, void* userData)
12-
{
13-
if(!formatter || !buffer || !*buffer || (bufferLen <= 0) || !instruction || !operand)
14-
{
15-
return ZYDIS_STATUS_INVALID_PARAMETER;
16-
}
17-
18-
// The immediate operand contains an address
19-
if(operand->imm.isRelative)
20-
{
21-
ZydisBool printSignedHEX = ZYDIS_FALSE;
22-
switch(formatter->addressFormat)
23-
{
24-
case ZYDIS_FORMATTER_ADDR_DEFAULT:
25-
case ZYDIS_FORMATTER_ADDR_ABSOLUTE:
26-
{
27-
uint64_t address;
28-
ZYDIS_CHECK(ZydisCalcAbsoluteAddress(instruction, operand, &address));
29-
return formatter->funcPrintAddress(formatter, buffer, bufferLen, instruction, operand,
30-
address, userData);
31-
}
32-
case ZYDIS_FORMATTER_ADDR_RELATIVE_SIGNED:
33-
printSignedHEX = ZYDIS_TRUE;
34-
break;
35-
case ZYDIS_FORMATTER_ADDR_RELATIVE_UNSIGNED:
36-
break;
37-
default:
38-
return ZYDIS_STATUS_INVALID_PARAMETER;
39-
}
40-
41-
if(printSignedHEX)
42-
{
43-
return ZydisPrintHexS(
44-
buffer, bufferLen, (int32_t)operand->imm.value.s, 1, ZYDIS_TRUE, ZYDIS_TRUE);
45-
}
46-
return ZydisPrintHexU(buffer, bufferLen, operand->imm.value.u, 1, ZYDIS_TRUE, ZYDIS_TRUE);
47-
}
48-
49-
// The immediate operand contains an actual ordinal value
50-
return formatter->funcPrintImmediate(
51-
formatter, buffer, bufferLen, instruction, operand, userData);
52-
}
53-
54-
static ZydisStatus ZydisFormatterPrintDisplacementIntelCustom(const ZydisFormatter* formatter,
55-
char** buffer, size_t bufferLen, const ZydisDecodedInstruction* instruction,
56-
const ZydisDecodedOperand* operand, void* userData)
57-
{
58-
(void)userData;
59-
60-
if(!formatter || !buffer || !*buffer || (bufferLen <= 0) || !instruction || !operand)
61-
{
62-
return ZYDIS_STATUS_INVALID_PARAMETER;
63-
}
64-
65-
if(operand->mem.disp.hasDisplacement && ((operand->mem.disp.value) ||
66-
((operand->mem.base == ZYDIS_REGISTER_NONE) &&
67-
(operand->mem.index == ZYDIS_REGISTER_NONE))))
68-
{
69-
ZydisBool printSignedHEX =
70-
(formatter->displacementFormat != ZYDIS_FORMATTER_DISP_HEX_UNSIGNED);
71-
if(printSignedHEX && (operand->mem.disp.value < 0) && (
72-
(operand->mem.base != ZYDIS_REGISTER_NONE) ||
73-
(operand->mem.index != ZYDIS_REGISTER_NONE)))
74-
{
75-
return ZydisPrintHexS(
76-
buffer, bufferLen, operand->mem.disp.value, 1, ZYDIS_TRUE, ZYDIS_TRUE);
77-
}
78-
char* bufEnd = *buffer + bufferLen;
79-
if((operand->mem.base != ZYDIS_REGISTER_NONE) ||
80-
(operand->mem.index != ZYDIS_REGISTER_NONE))
81-
{
82-
ZYDIS_CHECK(ZydisPrintStr(buffer, bufferLen, "+", ZYDIS_LETTER_CASE_DEFAULT));
83-
}
84-
return ZydisPrintHexU(
85-
buffer, bufEnd - *buffer, (uint64_t)operand->mem.disp.value, 1, ZYDIS_TRUE, ZYDIS_TRUE);
86-
}
87-
return ZYDIS_STATUS_SUCCESS;
88-
}
89-
90-
static ZydisStatus ZydisFormatterPrintImmediateIntelCustom(const ZydisFormatter* formatter,
91-
char** buffer, size_t bufferLen, const ZydisDecodedInstruction* instruction,
92-
const ZydisDecodedOperand* operand, void* userData)
93-
{
94-
(void)userData;
95-
96-
if(!formatter || !buffer || !*buffer || (bufferLen <= 0) || !instruction || !operand)
97-
{
98-
return ZYDIS_STATUS_INVALID_PARAMETER;
99-
}
100-
101-
ZydisBool printSignedHEX = (formatter->immediateFormat == ZYDIS_FORMATTER_IMM_HEX_SIGNED);
102-
if(formatter->immediateFormat == ZYDIS_FORMATTER_IMM_HEX_AUTO)
103-
{
104-
printSignedHEX = operand->imm.isSigned;
105-
}
106-
107-
if(printSignedHEX && (operand->imm.value.s < 0))
108-
{
109-
switch(operand->size)
110-
{
111-
case 8:
112-
return ZydisPrintHexS(
113-
buffer, bufferLen, (int8_t)operand->imm.value.s, 1, ZYDIS_TRUE, ZYDIS_TRUE);
114-
case 16:
115-
return ZydisPrintHexS(
116-
buffer, bufferLen, (int16_t)operand->imm.value.s, 1, ZYDIS_TRUE, ZYDIS_TRUE);
117-
case 32:
118-
return ZydisPrintHexS(
119-
buffer, bufferLen, (int32_t)operand->imm.value.s, 1, ZYDIS_TRUE, ZYDIS_TRUE);
120-
case 64:
121-
return ZydisPrintHexS(
122-
buffer, bufferLen, operand->imm.value.s, 1, ZYDIS_TRUE, ZYDIS_TRUE);
123-
default:
124-
return ZYDIS_STATUS_INVALID_PARAMETER;
125-
}
126-
}
127-
switch(instruction->operandWidth)
128-
{
129-
case 8:
130-
return ZydisPrintHexU(
131-
buffer, bufferLen, (uint8_t)operand->imm.value.u, 1, ZYDIS_TRUE, ZYDIS_TRUE);
132-
case 16:
133-
return ZydisPrintHexU(
134-
buffer, bufferLen, (uint16_t)operand->imm.value.u, 1, ZYDIS_TRUE, ZYDIS_TRUE);
135-
case 32:
136-
return ZydisPrintHexU(
137-
buffer, bufferLen, (uint32_t)operand->imm.value.u, 1, ZYDIS_TRUE, ZYDIS_TRUE);
138-
case 64:
139-
return ZydisPrintHexU(
140-
buffer, bufferLen, operand->imm.value.u, 1, ZYDIS_TRUE, ZYDIS_TRUE);
141-
default:
142-
return ZYDIS_STATUS_INVALID_PARAMETER;
143-
}
144-
}
145-
1469
void Zydis::GlobalInitialize()
14710
{
14811
if(!mInitialized)
@@ -154,13 +17,9 @@ void Zydis::GlobalInitialize()
15417
ZydisDecoderInit(&mDecoder, ZYDIS_MACHINE_MODE_LEGACY_32, ZYDIS_ADDRESS_WIDTH_32);
15518
#endif //_WIN64
15619
ZydisFormatterInit(&mFormatter, ZYDIS_FORMATTER_STYLE_INTEL);
157-
//NOTE: the format functions change paddingLength from 2 to 1 to change:
158-
// push 0x01 -> push 0x1
159-
// [ebp-0x04] -> [ebp-0x4]
160-
//TODO: keep these functions up to date with Zydis upstream until fixed!
161-
mFormatter.funcFormatOperandImm = &ZydisFormatterFormatOperandImmIntelCustom;
162-
mFormatter.funcPrintDisplacement = &ZydisFormatterPrintDisplacementIntelCustom;
163-
mFormatter.funcPrintImmediate = &ZydisFormatterPrintImmediateIntelCustom;
20+
ZydisFormatterSetProperty(&mFormatter, ZYDIS_FORMATTER_PROP_HEX_PADDING_ADDR, 0);
21+
ZydisFormatterSetProperty(&mFormatter, ZYDIS_FORMATTER_PROP_HEX_PADDING_DISP, 0);
22+
ZydisFormatterSetProperty(&mFormatter, ZYDIS_FORMATTER_PROP_HEX_PADDING_IMM, 0);
16423
}
16524
}
16625

0 commit comments

Comments
 (0)