You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Update to flatbuffers `25.2.10`
- Add fuzzing targets for type and function `from_bytes`
- Update examples
- Simplify type spec
- Make constraints generic and remove specialized constraint lists
- Space optimizations for type and functions specs
- More tests with greater coverage
- Introduce the concept of a WARP `File` and `Chunk`s
- Make chunk compression configurable
- Make `Type` objects class field unboxed (decreases memory pressure)
- Use standard directory structure for Rust API
- Move tests to `tests` directory for more easy discovery
- Remove almost all uses of `unwrap` (needed for server-side parsing)
- Refactor `TypeMetadata`
- Add `mock` module for easy mocking in tests and examples
- Make `Symbol` space optimized
- Switch to using `.warp` extension to represent general analysis data instead of just signatures
- Add format version to `File` and `Chunk` (allow for breaking changes later)
- Make analysis data (signatures and types) copy on write (See `ChunkHandler` impl's)
This work is being done to allow for networked WARP information and generally to make the WARP format more usable in a wider set of scenarios. After this commit any breaking changes to the format will be held off for 2.0, if that ever becomes a thing.
Copy file name to clipboardExpand all lines: README.md
+22-4Lines changed: 22 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ The basic block GUID is the UUIDv5 of the byte sequence of the instructions (sor
68
68
69
69
#### When are instructions that set a register to itself removed?
70
70
71
-
To support hot-patching we must remove them as they can be injected by the compiler at the start of a function (see: [1] and [2]).
71
+
To support hot-patching, we must remove them as they can be injected by the compiler at the start of a function (see: [1] and [2]).
72
72
This does not affect the accuracy of the function GUID as they are only removed when the instruction is a NOP:
73
73
74
74
- Register groups with no implicit extension will be removed (see: [3] (under 3.4.1.1))
@@ -85,15 +85,33 @@ For the `x86` architecture the instruction `e8b55b0100` (or `call 0x15bba`) woul
85
85
86
86
The namespace for Basic Block GUID's is `0192a178-7a5f-7936-8653-3cbaa7d6afe7`.
87
87
88
-
### Function Constraints
88
+
### Constraints
89
89
90
-
Function constraints allow us to further disambiguate between functions with the same GUID, when creating the functions we store information about the following:
90
+
Constraints allow us to further disambiguate between functions with the same GUID; when creating the functions, we retrieve extra information
91
+
that is consistent between versions of the same function, some examples are:
91
92
92
93
- Called functions
93
94
- Caller functions
94
95
- Adjacent functions
95
96
96
-
Each entry in the lists above is referred to as a "constraint" that can be used to further reduce the number of matches for a given function GUID.
97
+
Each extra piece of information is referred to as a "constraint" that can be used to further reduce the number of matches for a given function GUID.
98
+
99
+
#### Creating a Constraint
100
+
101
+
Constraints are made up of a GUID and optionally, a matching offset. Adding a matching offset is preferred to give locality to the constraints,
102
+
for example, if you have a function `A` which calls into function `B` that is one constraint, but if the function `B` is also adjacent to function `A`
103
+
without a matching offset the two constraints may be merged into a single one, reducing the number of matching constraints.
104
+
105
+
- The adjacent function `B` as a constraint: `(9F188A12-3EA1-477D-B368-361936EEA213, -30)`
106
+
- The call to function `B` as a constraint: `(9F188A12-3EA1-477D-B368-361936EEA213, 48)`
107
+
108
+
#### Creating a Constraint GUID
109
+
110
+
The constraint GUID is the UUIDv5 of the relevant bytes that would be computable at creation time and lookup time.
111
+
112
+
##### What is the UUIDv5 namespace?
113
+
114
+
The namespace for Constraint GUID's is `019701f3-e89c-7afa-9181-371a5e98a576`.
97
115
98
116
##### Why don't we require matching on constraints for trivial functions?
0 commit comments