AngrTracerError: Could not step to the first address of the trace - state split
See original GitHub issueWhen attempting to test against a real (albeit incredibly simple - just a tiny message deserialization test, though the same happens on much more complicated targets too) Rust target, after cle loads and does a run, angr gets mad immediately upon calling simgr.use_technique(t) (see stack trace below).
WARNING | 2019-12-11 03:05:52,461 | cle.loader | The main binary is a position-independent executable. It is being loaded with a base address of 0x400000.
WARNING | 2019-12-11 03:05:54,099 | cle.loader | The main binary is a position-independent executable. It is being loaded with a base address of 0x400000.
Traceback (most recent call last):
File "run_driller.py", line 68, in <module>
main()
File "run_driller.py", line 55, in main
for _, new_input in Driller(binary, seed).drill_generator():
File "/root/driller/venv/lib/python3.7/site-packages/driller/driller_main.py", line 101, in drill_generator
for i in self._drill_input():
File "/root/driller/venv/lib/python3.7/site-packages/driller/driller_main.py", line 131, in _drill_input
simgr.use_technique(t)
File "/root/driller/venv/lib/python3.7/site-packages/angr/sim_manager.py", line 188, in use_technique
tech.setup(self)
File "/root/driller/venv/lib/python3.7/site-packages/angr/exploration_techniques/tracer.py", line 192, in setup
raise AngrTracerError("Could not step to the first address of the trace - state split")
angr.errors.AngrTracerError: Could not step to the first address of the trace - state split
Issue Analytics
- State:
- Created 4 years ago
- Comments:14 (7 by maintainers)
Top Results From Across the Web
Could not step to the first address of the trace - state split #1544
The binary I am analyzing is Palindrome from CGC binaries. (attached) Issue2.zip (Please put the include files in the right path (as mention ......
Read more >Could not step to the first address of the trace - state split
The binary I am analyzing is Palindrome from CGC binaries. (attached) Issue2.zip (Please put the include files in the right path (as mention...
Read more >angr.errors.AngrTracerError Example - Program Talk
By voting up you can indicate which examples are most useful and appropriate. ... AngrTracerError("Could not step to the first address of the...
Read more >Analysis and Coordination — angr 9.2.30 documentation
If the symbol was not available in the loaded libraries, this address may be provided by ... Throw an exception if the execution...
Read more >Driller2 - n132
The driller core, which is now an exploration technique in angr. r ... not step to the first address of the trace -...
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
The point of the algorithm I referenced which identifies the entry point (the
find the entry point
comment) is that it works regardless of the base address used by qemu, by assuming that the page-alignment must be the same and that the block prior to it will be very far away, a jump from a different mapped image.Yes, the goal is to create the list - a list which indicates that for the nth initializer, its presence in the trace starts at the specified index.
So for example the trace looks like this
And what we want to find out is what indices correspond to each of those points so we can correctly keep track of where in the trace our execution corresponds to when we’re executing with angr’s simplified model of running initializers (the LinuxLoader simprocedure).
We already use heuristics to determine the entry point trace index, we just need to do the same thing to figure out where the initializers are, too. The result of that computation will be a list of trace indices, one corresponding to each initializer. Then, we need to store that list and do the thing I described earlier (only 7 months ago? yikes) where we use it to update the current index while executing.