@@ -6,143 +6,6 @@ bool Zydis::mInitialized = false;
6
6
ZydisDecoder Zydis::mDecoder ;
7
7
ZydisFormatter Zydis::mFormatter ;
8
8
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
-
146
9
void Zydis::GlobalInitialize ()
147
10
{
148
11
if (!mInitialized )
@@ -154,13 +17,9 @@ void Zydis::GlobalInitialize()
154
17
ZydisDecoderInit (&mDecoder , ZYDIS_MACHINE_MODE_LEGACY_32, ZYDIS_ADDRESS_WIDTH_32);
155
18
#endif // _WIN64
156
19
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 );
164
23
}
165
24
}
166
25
0 commit comments