Skip to content

Commit 935eba2

Browse files
committed
Binary: Add more location predicates.
1 parent c1f1711 commit 935eba2

5 files changed

Lines changed: 22 additions & 0 deletions

File tree

binary/ql/lib/semmle/code/binary/ast/internal/CilInstructions.qll

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ class CilParameter instanceof @il_parameter {
2222
int getIndex() { il_parameter(this, _, result, _) }
2323

2424
string getName() { il_parameter(this, _, _, result) }
25+
26+
Location getLocation() { none() } // TODO: Extract
2527
}
2628

2729
class CilMethod extends @method {
@@ -49,6 +51,8 @@ class CilMethod extends @method {
4951
result.getMethod() = this and
5052
result.getIndex() = i
5153
}
54+
55+
Location getLocation() { none() } // TODO: Extract
5256
}
5357

5458
pragma[nomagic]

binary/ql/lib/semmle/code/binary/ast/ir/internal/Instruction0/TranslatedElement.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
private import semmle.code.binary.ast.instructions as Raw
2+
private import semmle.code.binary.ast.Location
23
private import codeql.controlflow.SuccessorType
34
private import semmle.code.binary.ast.ir.internal.Tags
45
private import InstructionTag
@@ -273,6 +274,8 @@ abstract class TranslatedElement extends TTranslatedElement {
273274
* Gets the enclosing translated function of this translated element.
274275
*/
275276
abstract TranslatedFunction getEnclosingFunction();
277+
278+
abstract Location getLocation();
276279
}
277280

278281
/**

binary/ql/lib/semmle/code/binary/ast/ir/internal/Instruction0/TranslatedFunction.qll

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
private import semmle.code.binary.ast.Location
12
private import semmle.code.binary.ast.instructions as Raw
23
private import TranslatedElement
34
private import codeql.util.Option
@@ -125,6 +126,8 @@ class TranslatedX86Function extends TranslatedFunction, TTranslatedX86Function {
125126
r = any(Raw::R9Register r9).getASubRegister*() and ordering = 3
126127
)
127128
}
129+
130+
final override Location getLocation() { result = entry.getLocation() }
128131
}
129132

130133
class TranslatedCilParameter extends TranslatedElement, TTranslatedCilParameter {
@@ -134,6 +137,8 @@ class TranslatedCilParameter extends TranslatedElement, TTranslatedCilParameter
134137

135138
override Raw::Element getRawElement() { result = p }
136139

140+
final override Location getLocation() { result = p.getLocation() }
141+
137142
override Variable getResultVariable() { none() }
138143

139144
override TranslatedFunction getEnclosingFunction() {
@@ -182,6 +187,8 @@ class TranslatedCilMethod extends TranslatedFunction, TTranslatedCilMethod {
182187

183188
override Raw::Element getRawElement() { result = method }
184189

190+
final override Location getLocation() { result = method.getLocation() }
191+
185192
override predicate hasBodyInstruction(
186193
Opcode opcode, InstructionTag tag, Option<Variable>::Option v
187194
) {

binary/ql/lib/semmle/code/binary/ast/ir/internal/Instruction0/TranslatedInstruction.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
private import semmle.code.binary.ast.Location
12
private import semmle.code.binary.ast.instructions as Raw
23
private import TranslatedElement
34
private import semmle.code.binary.ast.ir.internal.Opcode as Opcode
@@ -36,6 +37,8 @@ abstract class TranslatedX86Instruction extends TranslatedInstruction {
3637
final StackPointer getStackPointer() {
3738
result = this.getLocalVariable(X86RegisterTag(any(Raw::RspRegister sp)))
3839
}
40+
41+
final override Location getLocation() { result = instr.getLocation() }
3942
}
4043

4144
abstract class TranslatedCilInstruction extends TranslatedInstruction {
@@ -59,6 +62,8 @@ abstract class TranslatedCilInstruction extends TranslatedInstruction {
5962
final Variable getCilLocalVariable(int index) {
6063
result = this.getLocalVariable(StlocVarTag(index))
6164
}
65+
66+
final override Location getLocation() { result = instr.getLocation() }
6267
}
6368

6469
/**

binary/ql/lib/semmle/code/binary/ast/ir/internal/Instruction0/TranslatedOperand.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
private import semmle.code.binary.ast.Location
12
private import semmle.code.binary.ast.instructions as Raw
23
private import TranslatedElement
34
private import codeql.util.Option
@@ -40,6 +41,8 @@ abstract class TranslatedX86Operand extends TranslatedOperand {
4041
}
4142

4243
final override string toString() { result = "Translation of " + op }
44+
45+
final override Location getLocation() { none() } // TODO: Implement this
4346
}
4447

4548
TranslatedOperand getTranslatedOperand(Raw::Element op) {

0 commit comments

Comments
 (0)