mirror of https://github.com/x64dbg/zydis
Renamed disassembler mode constants
ZYDIS_DISASSEMBLER_MODE_* -> ZYDIS_OPERATING_MODE_*
This commit is contained in:
parent
71a6d786d7
commit
40d6c39dbe
|
@ -195,7 +195,7 @@ void disassembleBuffer(uint8_t* data, size_t length, ZydisBool installHooks)
|
||||||
ZydisInstructionInfo info;
|
ZydisInstructionInfo info;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
while (ZYDIS_SUCCESS(
|
while (ZYDIS_SUCCESS(
|
||||||
ZydisDecode(ZYDIS_DISASSEMBLER_MODE_64BIT, data, length, instructionPointer, &info)))
|
ZydisDecode(ZYDIS_OPERATING_MODE_64BIT, data, length, instructionPointer, &info)))
|
||||||
{
|
{
|
||||||
data += info.length;
|
data += info.length;
|
||||||
length -= info.length;
|
length -= info.length;
|
||||||
|
|
|
@ -401,13 +401,13 @@ typedef struct ZydisOperandInfo_
|
||||||
typedef uint8_t ZydisOperatingMode;
|
typedef uint8_t ZydisOperatingMode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Values that represent disassembler-modes.
|
* @brief Values that represent operating modes.
|
||||||
*/
|
*/
|
||||||
enum ZydisDisassemblerModes
|
enum ZydisOperatingModes
|
||||||
{
|
{
|
||||||
ZYDIS_DISASSEMBLER_MODE_16BIT = 16,
|
ZYDIS_OPERATING_MODE_16BIT = 16,
|
||||||
ZYDIS_DISASSEMBLER_MODE_32BIT = 32,
|
ZYDIS_OPERATING_MODE_32BIT = 32,
|
||||||
ZYDIS_DISASSEMBLER_MODE_64BIT = 64
|
ZYDIS_OPERATING_MODE_64BIT = 64
|
||||||
};
|
};
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -512,7 +512,7 @@ static ZydisStatus ZydisCollectOptionalPrefixes(ZydisDecoderContext* ctx,
|
||||||
++info->details.prefixes.has67;
|
++info->details.prefixes.has67;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if ((ctx->operatingMode == ZYDIS_DISASSEMBLER_MODE_64BIT) &&
|
if ((ctx->operatingMode == ZYDIS_OPERATING_MODE_64BIT) &&
|
||||||
(prefixByte & 0xF0) == 0x40)
|
(prefixByte & 0xF0) == 0x40)
|
||||||
{
|
{
|
||||||
info->details.rex.data[0] = prefixByte;
|
info->details.rex.data[0] = prefixByte;
|
||||||
|
@ -722,13 +722,13 @@ static ZydisStatus ZydisDecodeOperandModrmRm(ZydisDecoderContext* ctx,
|
||||||
}
|
}
|
||||||
switch (ctx->operatingMode)
|
switch (ctx->operatingMode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT: // TODO: Set ZYDIS_ATTRIB_ACCEPTS_ADDRESSSIZE and ZYDIS_ATTRIB_HAS_ADDRESSSIZE after getting the instruction definition
|
case ZYDIS_OPERATING_MODE_16BIT: // TODO: Set ZYDIS_ATTRIB_ACCEPTS_ADDRESSSIZE and ZYDIS_ATTRIB_HAS_ADDRESSSIZE after getting the instruction definition
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 16;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 16;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 16 : 32;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 16 : 32;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 64;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 64;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -772,7 +772,7 @@ static ZydisStatus ZydisDecodeOperandModrmRm(ZydisDecoderContext* ctx,
|
||||||
case 0:
|
case 0:
|
||||||
if (modrm_rm == 5)
|
if (modrm_rm == 5)
|
||||||
{
|
{
|
||||||
if (ctx->operatingMode == ZYDIS_DISASSEMBLER_MODE_64BIT)
|
if (ctx->operatingMode == ZYDIS_OPERATING_MODE_64BIT)
|
||||||
{
|
{
|
||||||
info->attributes |= ZYDIS_ATTRIB_IS_RELATIVE;
|
info->attributes |= ZYDIS_ATTRIB_IS_RELATIVE;
|
||||||
operand->mem.base = ZYDIS_REGISTER_EIP;
|
operand->mem.base = ZYDIS_REGISTER_EIP;
|
||||||
|
@ -1035,11 +1035,11 @@ static ZydisStatus ZydisDecodeOperand(ZydisDecoderContext* ctx, ZydisInstruction
|
||||||
registerClass = ZYDIS_REGCLASS_TEST;
|
registerClass = ZYDIS_REGCLASS_TEST;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_SEM_OPERAND_TYPE_CR:
|
case ZYDIS_SEM_OPERAND_TYPE_CR:
|
||||||
operand->size = (ctx->operatingMode == ZYDIS_DISASSEMBLER_MODE_64BIT) ? 64 : 32;
|
operand->size = (ctx->operatingMode == ZYDIS_OPERATING_MODE_64BIT) ? 64 : 32;
|
||||||
registerClass = ZYDIS_REGCLASS_CONTROL;
|
registerClass = ZYDIS_REGCLASS_CONTROL;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_SEM_OPERAND_TYPE_DR:
|
case ZYDIS_SEM_OPERAND_TYPE_DR:
|
||||||
operand->size = (ctx->operatingMode == ZYDIS_DISASSEMBLER_MODE_64BIT) ? 64 : 32;
|
operand->size = (ctx->operatingMode == ZYDIS_OPERATING_MODE_64BIT) ? 64 : 32;
|
||||||
registerClass = ZYDIS_REGCLASS_DEBUG;
|
registerClass = ZYDIS_REGCLASS_DEBUG;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_SEM_OPERAND_TYPE_FPR:
|
case ZYDIS_SEM_OPERAND_TYPE_FPR:
|
||||||
|
@ -1512,13 +1512,13 @@ static ZydisStatus ZydisDecodeOperand(ZydisDecoderContext* ctx, ZydisInstruction
|
||||||
}
|
}
|
||||||
switch (ctx->operatingMode)
|
switch (ctx->operatingMode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 16;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 16;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 16 : 32;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 16 : 32;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 64;
|
operand->mem.addressSize = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 32 : 64;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1949,7 +1949,7 @@ static ZydisStatus ZydisNodeHandlerMode(ZydisDecoderContext* ctx, uint16_t* inde
|
||||||
ZYDIS_ASSERT(ctx);
|
ZYDIS_ASSERT(ctx);
|
||||||
ZYDIS_ASSERT(index);
|
ZYDIS_ASSERT(index);
|
||||||
|
|
||||||
*index = (ctx->operatingMode == ZYDIS_DISASSEMBLER_MODE_64BIT) ? 0 : 1;
|
*index = (ctx->operatingMode == ZYDIS_OPERATING_MODE_64BIT) ? 0 : 1;
|
||||||
return ZYDIS_STATUS_SUCCESS;
|
return ZYDIS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2074,11 +2074,11 @@ static ZydisStatus ZydisNodeHandlerOperandSize(ZydisDecoderContext* ctx,
|
||||||
|
|
||||||
switch (ctx->operatingMode)
|
switch (ctx->operatingMode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
*index = (info->attributes & ZYDIS_ATTRIB_HAS_OPERANDSIZE) ? 1 : 0;
|
*index = (info->attributes & ZYDIS_ATTRIB_HAS_OPERANDSIZE) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
*index = (info->attributes & ZYDIS_ATTRIB_HAS_OPERANDSIZE) ? 0 : 1;
|
*index = (info->attributes & ZYDIS_ATTRIB_HAS_OPERANDSIZE) ? 0 : 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -2102,13 +2102,13 @@ static ZydisStatus ZydisNodeHandlerAddressSize(ZydisDecoderContext* ctx,
|
||||||
|
|
||||||
switch (ctx->operatingMode)
|
switch (ctx->operatingMode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 1 : 0;
|
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 1 : 0;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 0 : 1;
|
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 0 : 1;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 1 : 2;
|
*index = (info->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 1 : 2;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -2357,9 +2357,9 @@ ZydisStatus ZydisDecode(ZydisOperatingMode operatingMode, const void* buffer, si
|
||||||
ZydisStatus ZydisDecodeEx(ZydisOperatingMode operatingMode, const void* buffer, size_t bufferLen,
|
ZydisStatus ZydisDecodeEx(ZydisOperatingMode operatingMode, const void* buffer, size_t bufferLen,
|
||||||
uint64_t instructionPointer, ZydisDecodeGranularity granularity, ZydisInstructionInfo* info)
|
uint64_t instructionPointer, ZydisDecodeGranularity granularity, ZydisInstructionInfo* info)
|
||||||
{
|
{
|
||||||
if ((operatingMode != ZYDIS_DISASSEMBLER_MODE_16BIT) &&
|
if ((operatingMode != ZYDIS_OPERATING_MODE_16BIT) &&
|
||||||
(operatingMode != ZYDIS_DISASSEMBLER_MODE_32BIT) &&
|
(operatingMode != ZYDIS_OPERATING_MODE_32BIT) &&
|
||||||
(operatingMode != ZYDIS_DISASSEMBLER_MODE_64BIT))
|
(operatingMode != ZYDIS_OPERATING_MODE_64BIT))
|
||||||
{
|
{
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER;
|
return ZYDIS_STATUS_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
|
@ -607,7 +607,7 @@ static ZydisStatus ZydisPrepareMemoryOperand(ZydisEncoderContext* ctx,
|
||||||
ctx->dispBitSize = 32;
|
ctx->dispBitSize = 32;
|
||||||
|
|
||||||
// In 32 bit mode, ModRM allows for a shortcut here.
|
// In 32 bit mode, ModRM allows for a shortcut here.
|
||||||
if (ctx->info->mode == ZYDIS_DISASSEMBLER_MODE_32BIT)
|
if (ctx->info->mode == ZYDIS_OPERATING_MODE_32BIT)
|
||||||
{
|
{
|
||||||
ctx->info->details.modrm.mod = 0x00;
|
ctx->info->details.modrm.mod = 0x00;
|
||||||
ctx->info->details.modrm.rm = 0x05 /* memory */;
|
ctx->info->details.modrm.rm = 0x05 /* memory */;
|
||||||
|
@ -630,7 +630,7 @@ static ZydisStatus ZydisPrepareMemoryOperand(ZydisEncoderContext* ctx,
|
||||||
if (ZydisIsIPReg(operand->mem.base))
|
if (ZydisIsIPReg(operand->mem.base))
|
||||||
{
|
{
|
||||||
// rIP addressing is only available since AMD64.
|
// rIP addressing is only available since AMD64.
|
||||||
if (ctx->info->mode != ZYDIS_DISASSEMBLER_MODE_64BIT)
|
if (ctx->info->mode != ZYDIS_OPERATING_MODE_64BIT)
|
||||||
{
|
{
|
||||||
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
||||||
}
|
}
|
||||||
|
@ -664,12 +664,12 @@ static ZydisStatus ZydisPrepareMemoryOperand(ZydisEncoderContext* ctx,
|
||||||
case ZYDIS_REGCLASS_GPR16:
|
case ZYDIS_REGCLASS_GPR16:
|
||||||
switch (ctx->info->mode)
|
switch (ctx->info->mode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
break; // Nothing to do.
|
break; // Nothing to do.
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
ctx->info->attributes |= ZYDIS_ATTRIB_HAS_ADDRESSSIZE;
|
ctx->info->attributes |= ZYDIS_ATTRIB_HAS_ADDRESSSIZE;
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
// AMD64 doesn't allow for 16 bit addressing.
|
// AMD64 doesn't allow for 16 bit addressing.
|
||||||
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
||||||
default:
|
default:
|
||||||
|
@ -679,18 +679,18 @@ static ZydisStatus ZydisPrepareMemoryOperand(ZydisEncoderContext* ctx,
|
||||||
case ZYDIS_REGCLASS_GPR32:
|
case ZYDIS_REGCLASS_GPR32:
|
||||||
switch (ctx->info->mode)
|
switch (ctx->info->mode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
break; // Nothing to do.
|
break; // Nothing to do.
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
ctx->info->attributes |= ZYDIS_ATTRIB_HAS_ADDRESSSIZE;
|
ctx->info->attributes |= ZYDIS_ATTRIB_HAS_ADDRESSSIZE;
|
||||||
default:
|
default:
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER; // TODO
|
return ZYDIS_STATUS_INVALID_PARAMETER; // TODO
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZYDIS_REGCLASS_GPR64:
|
case ZYDIS_REGCLASS_GPR64:
|
||||||
if (ctx->info->mode != ZYDIS_DISASSEMBLER_MODE_64BIT)
|
if (ctx->info->mode != ZYDIS_OPERATING_MODE_64BIT)
|
||||||
{
|
{
|
||||||
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
return ZYDIS_STATUS_IMPOSSIBLE_INSTRUCTION; // TODO
|
||||||
}
|
}
|
||||||
|
@ -966,9 +966,9 @@ static ZydisStatus ZydisFindMatchingDef(const ZydisInstructionInfo* info,
|
||||||
if (curEntry->mnemonic != info->mnemonic ||
|
if (curEntry->mnemonic != info->mnemonic ||
|
||||||
curEntry->operandCount != info->operandCount ||
|
curEntry->operandCount != info->operandCount ||
|
||||||
curEntry->encoding != info->encoding ||
|
curEntry->encoding != info->encoding ||
|
||||||
(info->mode == ZYDIS_DISASSEMBLER_MODE_64BIT &&
|
(info->mode == ZYDIS_OPERATING_MODE_64BIT &&
|
||||||
curEntry->modeConstraint == ZYDIS_MODE_CONSTR_EXCLUDE64) ||
|
curEntry->modeConstraint == ZYDIS_MODE_CONSTR_EXCLUDE64) ||
|
||||||
(info->mode != ZYDIS_DISASSEMBLER_MODE_64BIT &&
|
(info->mode != ZYDIS_OPERATING_MODE_64BIT &&
|
||||||
curEntry->modeConstraint == ZYDIS_MODE_CONSTR_REQUIRE64))
|
curEntry->modeConstraint == ZYDIS_MODE_CONSTR_REQUIRE64))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -393,11 +393,11 @@ static ZydisStatus ZydisFormatterPrintAddressIntel(ZydisInstructionFormatter* fo
|
||||||
|
|
||||||
switch (info->mode)
|
switch (info->mode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen, ZYDIS_STRBUF_APPEND_MODE_DEFAULT,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen, ZYDIS_STRBUF_APPEND_MODE_DEFAULT,
|
||||||
"0x%08"PRIX64, address);
|
"0x%08"PRIX64, address);
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
return ZydisStringBufferAppendFormat(buffer, bufferLen, ZYDIS_STRBUF_APPEND_MODE_DEFAULT,
|
return ZydisStringBufferAppendFormat(buffer, bufferLen, ZYDIS_STRBUF_APPEND_MODE_DEFAULT,
|
||||||
"0x%016"PRIX64, address);
|
"0x%016"PRIX64, address);
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -68,14 +68,14 @@ ZydisStatus ZydisUtilsCalcAbsoluteTargetAddress(const ZydisInstructionInfo* info
|
||||||
(uint64_t)((int64_t)info->instrPointer + info->length + operand->imm.value.sqword);
|
(uint64_t)((int64_t)info->instrPointer + info->length + operand->imm.value.sqword);
|
||||||
switch (info->mode)
|
switch (info->mode)
|
||||||
{
|
{
|
||||||
case ZYDIS_DISASSEMBLER_MODE_16BIT:
|
case ZYDIS_OPERATING_MODE_16BIT:
|
||||||
case ZYDIS_DISASSEMBLER_MODE_32BIT:
|
case ZYDIS_OPERATING_MODE_32BIT:
|
||||||
if (operand->size == 16)
|
if (operand->size == 16)
|
||||||
{
|
{
|
||||||
*address &= 0xFFFF;
|
*address &= 0xFFFF;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ZYDIS_DISASSEMBLER_MODE_64BIT:
|
case ZYDIS_OPERATING_MODE_64BIT:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER;
|
return ZYDIS_STATUS_INVALID_PARAMETER;
|
||||||
|
|
|
@ -70,7 +70,7 @@ int main(int argc, char** argv)
|
||||||
ZydisStatus status;
|
ZydisStatus status;
|
||||||
size_t readOffs = 0;
|
size_t readOffs = 0;
|
||||||
while ((status = ZydisDecode(
|
while ((status = ZydisDecode(
|
||||||
ZYDIS_DISASSEMBLER_MODE_64BIT,
|
ZYDIS_OPERATING_MODE_64BIT,
|
||||||
readBuf + readOffs,
|
readBuf + readOffs,
|
||||||
numBytesRead - readOffs,
|
numBytesRead - readOffs,
|
||||||
readOffs,
|
readOffs,
|
||||||
|
|
Loading…
Reference in New Issue