本文整理匯總了Python中capstone.CS_GRP_JUMP屬性的典型用法代碼示例。如果您正苦於以下問題:Python capstone.CS_GRP_JUMP屬性的具體用法?Python capstone.CS_GRP_JUMP怎麽用?Python capstone.CS_GRP_JUMP使用的例子?那麽, 這裏精選的屬性代碼示例或許可以為您提供幫助。您也可以進一步了解該屬性所在類capstone
的用法示例。
在下文中一共展示了capstone.CS_GRP_JUMP屬性的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: is_jump
# 需要導入模塊: import capstone [as 別名]
# 或者: from capstone import CS_GRP_JUMP [as 別名]
def is_jump(i):
return i.group(CS_GRP_JUMP)
示例2: is_cond_jump
# 需要導入模塊: import capstone [as 別名]
# 或者: from capstone import CS_GRP_JUMP [as 別名]
def is_cond_jump(i):
return i.group(CS_GRP_JUMP) and i.id != X86_INS_JMP
示例3: instruction_from_cs_insn
# 需要導入模塊: import capstone [as 別名]
# 或者: from capstone import CS_GRP_JUMP [as 別名]
def instruction_from_cs_insn(csInsn, executable):
groups = []
if executable.architecture in (ARCHITECTURE.ARM, ARCHITECTURE.ARM_64):
if csInsn.mnemonic.startswith('bl'):
groups.append(Instruction.GRP_CALL)
elif csInsn.mnemonic.startswith('b'):
groups.append(Instruction.GRP_JUMP)
else:
if capstone.CS_GRP_JUMP in csInsn.groups:
groups.append(Instruction.GRP_JUMP)
if capstone.CS_GRP_CALL in csInsn.groups:
groups.append(Instruction.GRP_CALL)
instruction = Instruction(csInsn.address, csInsn.size, csInsn.bytes, csInsn.mnemonic, [], groups, csInsn, executable)
# We manually pull out the instruction details here so that capstone doesn't deepcopy everything which burns time
# and memory
detail = ctypes.cast(csInsn._raw.detail, ctypes.POINTER(capstone._cs_detail)).contents
if executable.architecture == ARCHITECTURE.X86 or executable.architecture == ARCHITECTURE.X86_64:
detail = detail.arch.x86
elif executable.architecture == ARCHITECTURE.ARM:
detail = detail.arch.arm
elif executable.architecture == ARCHITECTURE.ARM_64:
detail = detail.arch.arm64
operands = [operand_from_cs_op(detail.operands[i], instruction) for i in range(detail.op_count)]
instruction.operands = operands
return instruction
示例4: is_target_gotplt
# 需要導入模塊: import capstone [as 別名]
# 或者: from capstone import CS_GRP_JUMP [as 別名]
def is_target_gotplt(self, target):
assert self.gotplt_base and self.gotplt_sz
if not (self.gotplt_base <= target <
self.gotplt_base + self.gotplt_sz):
return False
for ent in self.gotplt_entries:
if ent.address == target:
if (CS_GRP_JUMP in ent.groups
and ent.operands[0].type == CS_OP_MEM):
return ent.operands[0].mem.disp + ent.address + ent.size
return False