Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Documentation created by fastman92
- movsx
- struct COperand
- {
- bool bIsMemoryOperand;
- union
- {
- int iCPUregister;
- struct
- {
- int registerUnmultiplied;
- int registerMultiplied;
- int registerMultipliedShift;
- int addValue;
- } memoryOperand;
- };
- };
- int type = argData[0] bits 7 to 5
- int addValueOffset;
- COperand op[2];
- if(type == 0)
- op[0].iCPUregister = argData[0] bits 3 to 5
- op[1].memoryOperand.registerUnmultiplied = -1;
- op[1].memoryOperand.registerMultiplied = -1;
- op[1].memoryOperand.addValue = 0;
- int registerUnmultiplied = argData[0] bits 0 to 2
- // example
- // second operand, related to registerUnmultiplied
- // default: [ecx], can't be [esp] and [ebp], but [esp * 1] or [ebp * 1]
- // on value 4: [ecx*4+eax]
- // on value 5: [535353h]
- if registerUnmultiplied == 4
- op[1].memoryOperand.registerUnmultiplied = argData[1] bits 0 to 2
- op[1].memoryOperand.registerMultiplied = argData[1] bits 3 to 5
- op[1].memoryOperand.registerMultipliedShift = argData[1] bits 6 to 7
- else if registerUnmultiplied == 5
- op[1].bIsMemoryOperand = true;
- op[1].memoryOperand.addValue = *(__int32*)argData + 1;
- else
- op[1].memoryOperand.registerUnmultiplied = registerUnmultiplied;
- else if(type == 1 || type == 2) // adding __int8 or __int32 value
- op[0].iCPUregister = argData[0] bits 3 to 5;
- op[1].memoryOperand.registerUnmultiplied = -1;
- op[1].memoryOperand.registerMultiplied = -1;
- op[1].memoryOperand.addValue = 0;
- int registerUnmultiplied = argData[0] bits 0 to 2
- // example
- // second operand, related to registerUnmultiplied
- // default: [ecx+24]
- // on value 4: movsx eax,word ptr [eax+edx*2-70] or movsx eax,word ptr [eax-70]
- if registerUnmultiplied == 4
- op[1].memoryOperand.registerUnmultiplied = argData[1] bits 0 to 2
- op[1].memoryOperand.registerMultiplied = argData[1] bits 3 to 5
- if(op[1].memoryOperand.registerMultiplied != 4)
- op[1].memoryOperand.registerMultipliedShift = argData[1] bits 6 to 7
- else
- op[1].memoryOperand.registerMultiplied -1;
- addValueOffset = 2;
- op[1].memoryOperand.addValue = *(__int8*)argData + 2;
- else
- op[1].memoryOperand.registerUnmultiplied = registerUnmultiplied;
- addValueOffset = 2;
- if(type == 1)
- op[1].memoryOperand.addValue = *(__int8*)argData + addValueOffset;
- else
- op[1].memoryOperand.addValue = *(__int32*)argData + addValueOffset;
- else if(type == 3)
- // example: movsx eax, cx
- op[0].iCPUregister = argData[0] bits 3 to 5;
- op[1].iCPUregister = argData[0] bits 0 to 2;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement