Comments (9)
I agree. I would try something like:
- Scan through the executable section, try to disassemble N instructions in a row (you can also use various hints, e.g., symbols and the executable's entry point, for the starting points).
- If disassembly succeeds, run recursive traversal from the address of the first instruction.
The traversal I have already implemented once, although never got to actually using it: 7f1e836. The traversal constructs control-flow graph on the fly and uses DataflowAnalyzer to perform abstract interpretation, so, it should be able to tell you the jump destinations, in particular, switches from/to THUMB mode.
One can take the above code as a starting point and do some experiments with it.
from snowman.
IDA already knows the ranges of addresses belonging to a function. Not sure, although, if it includes data into these ranges. If it does not, the IDA plug-in should not have problems with interpreting data as code. If it does, maybe we need to find where the instructions exactly are (IDA has getFlags() function for this), and update IdaFrontend::functionAddresses() to report only ranges of addresses containing executable code.
But this does not dismiss the need in a better discovery of the code.
from snowman.
Well couldnt this already piggyback on IDA? However a purely free ARM decompiler is welcomed.
from snowman.
seems to suffer quite a bit from confusing code
Can you provide an example?
from snowman.
are you speaking about stuff like ROP gadget ?
from snowman.
Related: #14 (comment)
from snowman.
Related: #51
from snowman.
Moreover #59 is an actual way to achieve this.
from snowman.
No, it's not.
from snowman.
Related Issues (20)
- gnuradio? HOT 3
- odd number of 0x00s after return or jumps possibly causing misinterpretation of next opcode HOT 5
- Snowman crashes when open file HOT 4
- FPU instructions support HOT 1
- Application Crash during Dataflow Analysis HOT 1
- Snowman sometimes struggles to interpret switch tables
- Reduce simple arithmetic of constant values
- Remove untaken branches from output HOT 2
- ms-dos executables ? HOT 6
- Android support needed. HOT 2
- Qt Wdeprecated-declarations warnings HOT 3
- Variable value can change when address is taken
- Can snowman standalone run on a predisassembled file? HOT 2
- Is it possible to decompile everything in order with all the diff files and such.
- [Question] Why does this ELF not work? HOT 4
- Can't save the c++ code HOT 3
- macOS prebuilt version
- Naming of struct fields wrong HOT 2
- Instructions unreadable in IDA 7.6 HOT 14
- Link is forwarding to youtube video?! HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from snowman.