|
|
|
|
|
by a1369209993
1850 days ago
|
|
> you can hide instructions in there and make it intractable for a static analyzer to determine whether they are really instructions or just data. Uh, no? This is very tractable - O(N) in the size of the binary - just check, for every single byte offset in executable memory, whether that offset, if jumped to or continued to from the previous instruction, would decode into a `msr s3_5_c15_c10_1, reg` or `mrs reg, s3_5_c15_c10_1` instruction. IIUC, the decoding of a M1 ARM instruction doesn't depend on anything other than the instruction pointer, so you only need one pass, and you only need to decode one instruction, since the following instruction will occur at a later byte address. Edit: unless its executable section isn't read-only, in which case static analyzers can't prove much of anything with any real confidence. |
|
For example, this benign line of code would trip a static analyzer looking for `msr s3_5_c15_c10_1, x15` in the way you described: