MCPcopy Create free account
hub / github.com/Inori/GPCS4 / ZydisEncoderDecodedInstructionToEncoderRequest

Function ZydisEncoderDecodedInstructionToEncoderRequest

3rdParty/zydis/src/Encoder.c:4276–4456  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4274}
4275
4276ZYDIS_EXPORT ZyanStatus ZydisEncoderDecodedInstructionToEncoderRequest(
4277 const ZydisDecodedInstruction *instruction, const ZydisDecodedOperand* operands,
4278 ZyanU8 operand_count, ZydisEncoderRequest *request)
4279{
4280 if (!instruction || !request || (operand_count && !operands))
4281 {
4282 return ZYAN_STATUS_INVALID_ARGUMENT;
4283 }
4284
4285 ZYAN_MEMSET(request, 0, sizeof(ZydisEncoderRequest));
4286 request->machine_mode = instruction->machine_mode;
4287 request->mnemonic = instruction->mnemonic;
4288 request->prefixes = instruction->attributes & ZYDIS_ENCODABLE_PREFIXES;
4289 request->branch_type = instruction->meta.branch_type;
4290 if (!(instruction->attributes & ZYDIS_ATTRIB_ACCEPTS_SEGMENT))
4291 {
4292 request->prefixes &= ~ZYDIS_ATTRIB_HAS_SEGMENT;
4293 }
4294
4295 switch (instruction->address_width)
4296 {
4297 case 16:
4298 request->address_size_hint = ZYDIS_ADDRESS_SIZE_HINT_16;
4299 break;
4300 case 32:
4301 request->address_size_hint = ZYDIS_ADDRESS_SIZE_HINT_32;
4302 break;
4303 case 64:
4304 request->address_size_hint = ZYDIS_ADDRESS_SIZE_HINT_64;
4305 break;
4306 default:
4307 return ZYAN_STATUS_INVALID_ARGUMENT;
4308 }
4309
4310 switch (instruction->operand_width)
4311 {
4312 case 8:
4313 request->operand_size_hint = ZYDIS_OPERAND_SIZE_HINT_8;
4314 break;
4315 case 16:
4316 request->operand_size_hint = ZYDIS_OPERAND_SIZE_HINT_16;
4317 break;
4318 case 32:
4319 request->operand_size_hint = ZYDIS_OPERAND_SIZE_HINT_32;
4320 break;
4321 case 64:
4322 request->operand_size_hint = ZYDIS_OPERAND_SIZE_HINT_64;
4323 break;
4324 default:
4325 return ZYAN_STATUS_INVALID_ARGUMENT;
4326 }
4327
4328 switch (request->branch_type)
4329 {
4330 case ZYDIS_BRANCH_TYPE_NONE:
4331 request->branch_width = ZYDIS_BRANCH_WIDTH_NONE;
4332 break;
4333 case ZYDIS_BRANCH_TYPE_SHORT:

Callers 5

HandleBasicBlockEndMethod · 0.85
PrintSizeOptimizedFormFunction · 0.85
ZydisReEncodeInstructionFunction · 0.85
mainFunction · 0.85

Calls 2

ZYAN_MEMSETFunction · 0.85
ZydisCalcAbsoluteAddressFunction · 0.85

Tested by

no test coverage detected