Skip to content

Commit 589ecbb

Browse files
committed
Added DF_FILL_EFLAGS feature
1 parent 5f0e70c commit 589ecbb

9 files changed

Lines changed: 107 additions & 40 deletions

File tree

examples/tests/main.cpp

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,7 @@ int main(int argc, char **argv)
2525

2626
unsigned char rawData[] = {
2727

28-
0x68, 0, 0, 0, 0,
29-
0x9b,
30-
0xdf, 0xe0,
31-
0x66, 0xa1, 0xcc, 0xb0, 0x97, 0x7c,
32-
0xC7, 0xC1, 0x08, 0x00, 0x00, 0x00,
33-
0xc7, 0xf8, 0xaa, 0xaa, 0xaa, 0xaa,
34-
0x48, 0xC7, 0xC0, 0x00, 0x00, 0x00, 0x00
28+
0x33, 0xc0
3529
} ;
3630
res = distorm_decode(offset, (const unsigned char*)rawData, sizeof(rawData), Decode64Bits, decodedInstructions, MAX_INSTRUCTIONS, &decodedInstructionsCount);
3731
for (int i = 0; i < decodedInstructionsCount; i++) {

examples/tests/tests.vcxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,21 +14,21 @@
1414
<ProjectGuid>{C35D3921-227A-432A-BB5D-90ECEBAB08B2}</ProjectGuid>
1515
<Keyword>Win32Proj</Keyword>
1616
<RootNamespace>tests</RootNamespace>
17-
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
17+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
1818
</PropertyGroup>
1919
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
2020
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
2121
<ConfigurationType>Application</ConfigurationType>
2222
<UseDebugLibraries>true</UseDebugLibraries>
2323
<CharacterSet>Unicode</CharacterSet>
24-
<PlatformToolset>v141</PlatformToolset>
24+
<PlatformToolset>v142</PlatformToolset>
2525
</PropertyGroup>
2626
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
2727
<ConfigurationType>Application</ConfigurationType>
2828
<UseDebugLibraries>false</UseDebugLibraries>
2929
<WholeProgramOptimization>true</WholeProgramOptimization>
3030
<CharacterSet>Unicode</CharacterSet>
31-
<PlatformToolset>v141</PlatformToolset>
31+
<PlatformToolset>v142</PlatformToolset>
3232
</PropertyGroup>
3333
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
3434
<ImportGroup Label="ExtensionSettings">

examples/win32/disasm.vcxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,22 @@
2727
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
2828
<ConfigurationType>Application</ConfigurationType>
2929
<CharacterSet>MultiByte</CharacterSet>
30+
<PlatformToolset>v142</PlatformToolset>
3031
</PropertyGroup>
3132
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
3233
<ConfigurationType>Application</ConfigurationType>
3334
<CharacterSet>MultiByte</CharacterSet>
35+
<PlatformToolset>v142</PlatformToolset>
3436
</PropertyGroup>
3537
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
3638
<ConfigurationType>Application</ConfigurationType>
3739
<CharacterSet>MultiByte</CharacterSet>
40+
<PlatformToolset>v142</PlatformToolset>
3841
</PropertyGroup>
3942
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
4043
<ConfigurationType>Application</ConfigurationType>
4144
<CharacterSet>MultiByte</CharacterSet>
45+
<PlatformToolset>v142</PlatformToolset>
4246
</PropertyGroup>
4347
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
4448
<ImportGroup Label="ExtensionSettings">

include/distorm.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ typedef struct {
252252
uint8_t dispSize;
253253
/* Meta defines the instruction set class, and the flow control flags. Use META macros. */
254254
uint16_t meta;
255-
/* The CPU flags that the instruction operates upon. */
255+
/* The CPU flags that the instruction operates upon, set only with DF_FILL_EFLAGS enabled, otherwise 0. */
256256
uint16_t modifiedFlagsMask, testedFlagsMask, undefinedFlagsMask;
257257
} _DInst;
258258

@@ -390,7 +390,8 @@ typedef struct {
390390
#define DF_STOP_ON_PRIVILEGED 0x800
391391
/* The decoder will not synchronize to the next byte after the previosuly decoded instruction, instead it will start decoding at the next byte. */
392392
#define DF_SINGLE_BYTE_STEP 0x1000
393-
393+
/* The decoder will fill in the eflags fields for the decoded instruction. */
394+
#define DF_FILL_EFLAGS 0x2000
394395
/* The decoder will stop and return to the caller when any flow control instruction was decoded. */
395396
#define DF_STOP_ON_FLOW_CONTROL (DF_STOP_ON_CALL | DF_STOP_ON_RET | DF_STOP_ON_SYS | DF_STOP_ON_UNC_BRANCH | DF_STOP_ON_CND_BRANCH | DF_STOP_ON_INT | DF_STOP_ON_CMOV | DF_STOP_ON_HLT)
396397

make/win32/cdistorm.vcxproj

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,34 +23,34 @@
2323
<ProjectGuid>{15051CE1-AB10-4239-973D-01B84F2AD0A9}</ProjectGuid>
2424
<RootNamespace>distorm</RootNamespace>
2525
<Keyword>Win32Proj</Keyword>
26-
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
26+
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
2727
</PropertyGroup>
2828
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
2929
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='dll|Win32'" Label="Configuration">
3030
<ConfigurationType>DynamicLibrary</ConfigurationType>
3131
<UseOfAtl>false</UseOfAtl>
3232
<CharacterSet>NotSet</CharacterSet>
3333
<UseOfMfc>false</UseOfMfc>
34-
<PlatformToolset>v141</PlatformToolset>
34+
<PlatformToolset>v142</PlatformToolset>
3535
</PropertyGroup>
3636
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='clib|Win32'" Label="Configuration">
3737
<ConfigurationType>StaticLibrary</ConfigurationType>
3838
<UseOfAtl>false</UseOfAtl>
3939
<CharacterSet>NotSet</CharacterSet>
40-
<PlatformToolset>v141</PlatformToolset>
40+
<PlatformToolset>v142</PlatformToolset>
4141
</PropertyGroup>
4242
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='dll|x64'" Label="Configuration">
4343
<ConfigurationType>DynamicLibrary</ConfigurationType>
4444
<UseOfAtl>false</UseOfAtl>
4545
<CharacterSet>NotSet</CharacterSet>
4646
<UseOfMfc>false</UseOfMfc>
47-
<PlatformToolset>v141</PlatformToolset>
47+
<PlatformToolset>v142</PlatformToolset>
4848
</PropertyGroup>
4949
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='clib|x64'" Label="Configuration">
5050
<ConfigurationType>StaticLibrary</ConfigurationType>
5151
<UseOfAtl>false</UseOfAtl>
5252
<CharacterSet>NotSet</CharacterSet>
53-
<PlatformToolset>v141</PlatformToolset>
53+
<PlatformToolset>v142</PlatformToolset>
5454
</PropertyGroup>
5555
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
5656
<ImportGroup Label="ExtensionSettings">
@@ -109,7 +109,6 @@
109109
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
110110
<PreprocessorDefinitions>WIN32;NDEBUG;DISTORM_STATIC;SUPPORT_64BIT_OFFSET;%(PreprocessorDefinitions)</PreprocessorDefinitions>
111111
<StringPooling>true</StringPooling>
112-
<MinimalRebuild>true</MinimalRebuild>
113112
<ExceptionHandling>false</ExceptionHandling>
114113
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
115114
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -138,7 +137,6 @@
138137
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
139138
<PreprocessorDefinitions>WIN32;NDEBUG;DISTORM_STATIC;SUPPORT_64BIT_OFFSET;%(PreprocessorDefinitions)</PreprocessorDefinitions>
140139
<StringPooling>true</StringPooling>
141-
<MinimalRebuild>true</MinimalRebuild>
142140
<ExceptionHandling>false</ExceptionHandling>
143141
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
144142
<FunctionLevelLinking>true</FunctionLevelLinking>
@@ -164,7 +162,6 @@
164162
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
165163
<PreprocessorDefinitions>WIN32;NDEBUG;DISTORM_DYNAMIC;SUPPORT_64BIT_OFFSET;%(PreprocessorDefinitions)</PreprocessorDefinitions>
166164
<StringPooling>true</StringPooling>
167-
<MinimalRebuild>true</MinimalRebuild>
168165
<ExceptionHandling>false</ExceptionHandling>
169166
<FunctionLevelLinking>true</FunctionLevelLinking>
170167
<PrecompiledHeader>
@@ -193,7 +190,6 @@
193190
<AdditionalIncludeDirectories>%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
194191
<PreprocessorDefinitions>WIN32;NDEBUG;DISTORM_DYNAMIC;SUPPORT_64BIT_OFFSET;%(PreprocessorDefinitions)</PreprocessorDefinitions>
195192
<StringPooling>true</StringPooling>
196-
<MinimalRebuild>true</MinimalRebuild>
197193
<ExceptionHandling>false</ExceptionHandling>
198194
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
199195
<FunctionLevelLinking>true</FunctionLevelLinking>

python/distorm3/__init__.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ class _DInst (Structure):
162162
('addr', _OffsetType),
163163
('flags', c_uint16), # -1 if invalid. See C headers for more info
164164
('unusedPrefixesMask', c_uint16),
165-
('usedRegistersMask', c_uint32), # used registers mask.
165+
('usedRegistersMask', c_uint32), # used registers mask
166166
('opcode', c_uint16), # look up in opcode table
167167
('ops', _Operand*4),
168168
('size', c_ubyte),
@@ -171,9 +171,9 @@ class _DInst (Structure):
171171
('scale', c_ubyte), # ignore for values 0, 1 (other valid values - 2,4,8)
172172
('dispSize', c_ubyte),
173173
('meta', c_uint16), # meta flags - instruction set class, etc. See C headers again...
174-
('modifiedFlagsMask', c_uint16), # CPU modified (output) flags by instruction.
175-
('testedFlagsMask', c_uint16), # CPU tested (input) flags by instruction.
176-
('undefinedFlagsMask', c_uint16) # CPU undefined flags by instruction.
174+
('modifiedFlagsMask', c_uint16), # CPU modified (output) flags by instruction only set with DF_FILL_EFLAGS
175+
('testedFlagsMask', c_uint16), # CPU tested (input) flags by instruction only set with DF_FILL_EFLAGS
176+
('undefinedFlagsMask', c_uint16) # CPU undefined flags by instruction only set with DF_FILL_EFLAGS
177177
]
178178

179179
#==============================================================================
@@ -206,6 +206,16 @@ class _DInst (Structure):
206206
"FLAG_RIP_RELATIVE"
207207
]
208208

209+
# CPU flags that instructions modify, test or undefine (are EFLAGS compatible!).
210+
D_CF = 1 # Carry #
211+
D_PF = 4 # Parity #
212+
D_AF = 0x10 # Auxiliary #
213+
D_ZF = 0x40 # Zero #
214+
D_SF = 0x80 # Sign #
215+
D_IF = 0x200 # Interrupt #
216+
D_DF = 0x400 # Direction #
217+
D_OF = 0x800 # Overflow #
218+
209219
# Instruction could not be disassembled. Special-case handling
210220
FLAG_NOT_DECODABLE = 0xFFFF # -1 in uint16
211221
# Some features
@@ -224,6 +234,7 @@ class _DInst (Structure):
224234
DF_STOP_ON_HLT = 0x400
225235
DF_STOP_ON_PRIVILEGED = 0x800
226236
DF_SINGLE_BYTE_STEP = 0x1000
237+
DF_FILL_EFLAGS = 0x2000
227238
DF_STOP_ON_FLOW_CONTROL = (DF_STOP_ON_CALL | DF_STOP_ON_RET | DF_STOP_ON_SYS | \
228239
DF_STOP_ON_UNC_BRANCH | DF_STOP_ON_CND_BRANCH | DF_STOP_ON_INT | DF_STOP_ON_CMOV | \
229240
DF_STOP_ON_HLT)
@@ -575,6 +586,10 @@ def __init__(self, di, instructionBytes, dt):
575586
self.meta = di.meta
576587
self.instructionClass = _getISC(metas)
577588
self.flowControl = _getFC(metas)
589+
# copy eflags
590+
self.modifiedFlags = di.modifiedFlagsMask
591+
self.undefinedFlags = di.undefinedFlagsMask
592+
self.testedFlags = di.testedFlagsMask
578593

579594
def _extractOperand(self, di, operand):
580595
# a single operand can be up to: reg1 + reg2*scale + constant

python/test_distorm3.py

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ def test_dummy(self):
5454
self.fail("dummy")
5555

5656
class InstBin(Test):
57-
def __init__(self, bin, mode, features):
57+
def __init__(self, bin, mode, features, address):
5858
Test.__init__(self)
5959
try:
6060
bin = bin.decode("hex")
6161
except:
6262
bin = bytes.fromhex(bin)
6363
#fbin[mode].write(bin)
64-
self.insts = distorm3.Decompose(0, bin, mode, features)
64+
self.insts = distorm3.Decompose(address, bin, mode, features)
6565
self.inst = self.insts[0]
6666
def check_valid(self, instsNo = 1):
6767
self.assertNotEqual(self.inst.rawFlags, 65535)
@@ -141,14 +141,14 @@ def I16(instText, instNo = 0, features = 0):
141141
def I32(instText, features = 0):
142142
return Inst(instText, distorm3.Decode32Bits, 0, features)
143143

144-
def IB32(bin, features = 0):
145-
return InstBin(bin, distorm3.Decode32Bits, features)
144+
def IB32(bin, features = 0, address = 0):
145+
return InstBin(bin, distorm3.Decode32Bits, features, address)
146146

147147
def I64(instText, features = 0):
148148
return Inst(instText, distorm3.Decode64Bits, 0, features)
149149

150-
def IB64(bin, features = 0):
151-
return InstBin(bin, distorm3.Decode64Bits, features)
150+
def IB64(bin, features = 0, address = 0):
151+
return InstBin(bin, distorm3.Decode64Bits, features, address)
152152

153153
def ABS64(x):
154154
return x
@@ -1607,6 +1607,19 @@ def test_drop_prefixes(self):
16071607
def test_zzz_must_be_last_drop_prefixes(self):
16081608
# Drop prefixes when the last byte in stream is a prefix.
16091609
IB32("66")
1610+
def test_undefined_byte00(self):
1611+
# This is a regression test for the decomposer wrapper
1612+
a = ""
1613+
insts = IB32("c300").insts
1614+
for i in insts:
1615+
a += str(i)
1616+
insts = IB32("33c0" * 2000 + "90", 0, 0x4000).insts
1617+
self.assertEqual(insts[-1].mnemonic, "NOP")
1618+
self.assertEqual(insts[-1].instructionBytes, b"\x90")
1619+
self.assertEqual(insts[-1].address, 0x4000 + 2000 * 2)
1620+
self.assertEqual(insts[1000].mnemonic, "XOR")
1621+
self.assertEqual(insts[1000].instructionBytes, b"\x33\xc0")
1622+
self.assertEqual(insts[1000].address, 0x4000 + 1000 * 2)
16101623

16111624
class TestFeatures(unittest.TestCase):
16121625
def test_addr16(self):
@@ -1637,7 +1650,14 @@ def test_fc(self):
16371650
a = I32("nop\nxor eax, eax\n" + j + "\ninc eax", distorm3.DF_RETURN_FC_ONLY | distorm3.DF_STOP_ON_FLOW_CONTROL)
16381651
self.assertEqual(len(a.insts), 1)
16391652
def test_filter(self):
1640-
pass
1653+
a = IB32("33c0907e00" * 5, distorm3.DF_RETURN_FC_ONLY).insts
1654+
self.assertEqual(len(a), 5)
1655+
self.assertEqual(a[0].mnemonic[0], "J")
1656+
self.assertEqual(a[0].address, 3)
1657+
self.assertEqual(a[1].address, 8)
1658+
self.assertEqual(a[2].address, 13)
1659+
self.assertEqual(a[3].address, 18)
1660+
self.assertEqual(a[4].address, 23)
16411661
def test_stop_on_privileged(self):
16421662
a = I32("nop\niret\nret", distorm3.DF_STOP_ON_PRIVILEGED)
16431663
self.assertEqual(len(a.insts), 2)
@@ -1663,6 +1683,34 @@ def test_step_byte(self):
16631683
self.assertEqual(a[5].address, 5)
16641684
self.assertEqual(a[5].mnemonic, "DEC")
16651685
self.assertEqual(a[5].size, 1)
1686+
def test_eflags_on(self):
1687+
a = IB32("33c04890", distorm3.DF_FILL_EFLAGS).insts
1688+
# XOR
1689+
self.assertEqual(a[0].modifiedFlags, distorm3.D_SF | distorm3.D_ZF | distorm3.D_PF)
1690+
self.assertEqual(a[0].testedFlags, 0)
1691+
self.assertEqual(a[0].undefinedFlags, distorm3.D_AF)
1692+
# INC
1693+
self.assertEqual(a[1].modifiedFlags, distorm3.D_OF | distorm3.D_SF | distorm3.D_ZF | distorm3.D_AF | distorm3.D_PF)
1694+
self.assertEqual(a[1].testedFlags, 0)
1695+
self.assertEqual(a[1].undefinedFlags, 0)
1696+
# NOP
1697+
self.assertEqual(a[2].modifiedFlags, 0)
1698+
self.assertEqual(a[2].testedFlags, 0)
1699+
self.assertEqual(a[2].undefinedFlags, 0)
1700+
def test_eflags_off(self):
1701+
a = IB32("33c04890").insts
1702+
# XOR
1703+
self.assertEqual(a[0].modifiedFlags, 0)
1704+
self.assertEqual(a[0].testedFlags, 0)
1705+
self.assertEqual(a[0].undefinedFlags, 0)
1706+
# INC
1707+
self.assertEqual(a[1].modifiedFlags, 0)
1708+
self.assertEqual(a[1].testedFlags, 0)
1709+
self.assertEqual(a[1].undefinedFlags, 0)
1710+
# NOP
1711+
self.assertEqual(a[2].modifiedFlags, 0)
1712+
self.assertEqual(a[2].testedFlags, 0)
1713+
self.assertEqual(a[2].undefinedFlags, 0)
16661714

16671715
def GetNewSuite(className):
16681716
suite = unittest.TestSuite()

src/decoder.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,17 @@ static _DecodeType decode_get_effective_op_size(_DecodeType dt, _iflags decodedP
6666
return dt;
6767
}
6868

69-
/* A helper macro to convert from diStorm's CPU flags to EFLAGS. */
69+
/*
70+
* A helper macro to convert from diStorm's CPU flags to EFLAGS.
71+
* Copy eflags from compact version (8 bits) to eflags compatible (16 bits).
72+
* From D_COMPACT_IF to D_IF, bit index 1 to 9.
73+
* From D_COMPACT_DF to D_DF, bit index 3 to 10.
74+
* From D_COMPACT_OF to D_OF, bit index 5 to 11.
75+
*/
7076
#define CONVERT_FLAGS_TO_EFLAGS(dst, src, field) dst->field = ((src->field & D_COMPACT_SAME_FLAGS) | \
71-
((src->field & D_COMPACT_IF) ? D_IF : 0) | \
72-
((src->field & D_COMPACT_DF) ? D_DF : 0) | \
73-
((src->field & D_COMPACT_OF) ? D_OF : 0));
77+
((src->field & D_COMPACT_IF) << (9 - 1)) | \
78+
((src->field & D_COMPACT_DF) << (10 - 3)) | \
79+
((src->field & D_COMPACT_OF) << (11 - 5)));
7480

7581
static _DecodeResult decode_inst(_CodeInfo* ci, _PrefixState* ps, _DInst* di)
7682
{
@@ -377,9 +383,11 @@ static _DecodeResult decode_inst(_CodeInfo* ci, _PrefixState* ps, _DInst* di)
377383
if (di->base != R_NONE) di->usedRegistersMask |= _REGISTERTORCLASS[di->base];
378384

379385
/* Copy CPU affected flags. */
380-
CONVERT_FLAGS_TO_EFLAGS(di, isi, modifiedFlagsMask);
381-
CONVERT_FLAGS_TO_EFLAGS(di, isi, testedFlagsMask);
382-
CONVERT_FLAGS_TO_EFLAGS(di, isi, undefinedFlagsMask);
386+
if (ci->features & DF_FILL_EFLAGS) {
387+
if (isi->modifiedFlagsMask) CONVERT_FLAGS_TO_EFLAGS(di, isi, modifiedFlagsMask);
388+
if (isi->testedFlagsMask) CONVERT_FLAGS_TO_EFLAGS(di, isi, testedFlagsMask);
389+
if (isi->undefinedFlagsMask) CONVERT_FLAGS_TO_EFLAGS(di, isi, undefinedFlagsMask);
390+
}
383391

384392
/* Calculate the size of the instruction we've just decoded. */
385393
di->size = (uint8_t)((ci->code - startCode) & 0xff);
@@ -456,6 +464,7 @@ _DecodeResult decode_internal(_CodeInfo* _ci, int supportOldIntr, _DInst result[
456464
/* No entries are used yet. */
457465
*usedInstructionsCount = 0;
458466
ci.dt = _ci->dt;
467+
ci.features = _ci->features;
459468
_ci->nextOffset = codeOffset;
460469

461470
/* Decode instructions as long as we have what to decode/enough room in entries. */

src/insts.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This library is licensed under the BSD license. See the file COPYING.
1515

1616

1717
/*
18-
* GENERATED BY disOps at Tue Apr 21 15:58:20 2020
18+
* GENERATED BY disOps at Tue Apr 21 19:11:41 2020
1919
*/
2020

2121
_InstInfo II_MOVSXD = /*II*/ {0x1d4, 10027};

0 commit comments

Comments
 (0)