3 ms·
At the beginning of my career I worked for a company that was started with two reverse-engineering tools: one to produce low-level, single method/function flowc
by mynegation 4y ago
At the beginning of my career I worked for a company that was started with two reverse-engineering tools: one to produce low-level, single method/function flowcharts and another for automatic extraction of high level components and connections between them. It retired the former and later - the latter and pivoted to static analysis tools: finding logical errors, security vulnerabilities, enforcing coding standards. So I have first-hand knowledge of what worked and what did not work.
The main problem with low-level code visualization was that it did not add much to the well-formatted code representation in most cases. As for the high-level architecture extraction tool, which is more close to the question in the article, many links on the diagram do not just involve header inclusion, module import, method calls etc that are relatively easy to extract (not without its own challenges with virtual and indirect calls though). Users wanted to see Inter process communications (socket, queues, pipes, http connections) and extracting those is an uphill battle though we introduced some of it (lots of custom, platform specific code). Between this and knowing which connections are important and which are less so, automatically extracted diagrams were of limited value.
- rramadass 4y agoWhat were the two tools used?
- mynegation 4y agoNot sure I understand the question but the two tools company started with were (1) visualizing control flow graph of a single method/function (2) extracting hierarchical components from directory or package structure and relationships between them (imports, includes, calls etc). The ones that ended up being used were byproducts of the “compilers” that we had to implement: finding logical errors and security vulnerabilities based on control flow and data flow analysis (pretty much what conventional compilers like clang and gcc do for code generation and optimization).