arch/arm32/arch_arm
Define a set predicates to abstract from ARM specific instruction set and characteristics
- long_operation(operation:symbol)
WARNING: Predicate not present in compiled Datalog program (Dead Code)
- pc_relative_disp(EA:address, Disp:number)
PC stores the address of the current instruction plus 8 (two ARM instructions) in ARM state, and the current instruction plus 4 (two Thumb instructions) in Thumb state. This is used for computing PC-relative addresses.
NOTE: More specifically, in Thumb state, for B, BL, CBNZ, and CBZ instructions, the value of the PC is the address of the current instruction plus 4 bytes. For all other instructions that use labels, the value of the PC is the address of the current instruction plus 4 bytes, with bit[1] of the result cleared to 0 to make it word-aligned. The word-alignment needs to be handled where this is used.
WARNING: Predicate not present in compiled Datalog program (Dead Code)
- dangling_thumb_instr(EA:address)
E.g., 0: movs r0, #0 4: pop { r1, pc} The upper 2-bytes of the mov instruction happens to be a valid Thumb instruction: ITETE in this case.
- it_conditional(EA:address, IT:address)
IT: The IT (If-Then) instruction makes up to four following instructions (the IT block) conditional.
ITxyz x,y,z: specifies the condition switch for the second, third, and fourth instruction in the IT block, respectively.
The condition switch in the IT block can be either: T (Then) or E (Else).
This predicate determines if EA is a IT block instruction.
Uses:
arch.dangling_thumb_instr
,instruction
,next
Used by:
arch.conditional
,impossible_jump_target
- library_string_arg(Func:symbol, Reg:register)
The function
Func
receives a string argument at registerReg
.Used by:
block_heuristic
,data_block_candidate