Common interface to any structure containing nodes and edges between them, i.e., processes, images, routines, loops and basic blocks. More...
#include <dcfg_api.H>
Public Member Functions | |
virtual UINT32 | get_basic_block_ids (DCFG_ID_CONTAINER &node_ids) const =0 |
Get IDs of all basic blocks in the structure. | |
virtual UINT32 | get_internal_edge_ids (DCFG_ID_CONTAINER &edge_ids) const =0 |
Get list of internal edge IDs. | |
virtual UINT32 | get_inbound_edge_ids (DCFG_ID_CONTAINER &edge_ids) const =0 |
Get list of in-bound edge IDs. | |
virtual UINT32 | get_outbound_edge_ids (DCFG_ID_CONTAINER &edge_ids) const =0 |
Get list of out-bound edge IDs. | |
virtual UINT64 | get_instr_count () const =0 |
Get the total dynamic instruction count. | |
virtual UINT64 | get_instr_count_for_thread (UINT32 thread_id) const =0 |
Get per-thread dynamic instruction count. | |
Common interface to any structure containing nodes and edges between them, i.e., processes, images, routines, loops and basic blocks.
A single basic block is a special case consisting of one block and no internal edges. Most nodes correspond to basic blocks of the executed binary, but some nodes are "special". See the DCFG documentation for more information.
|
pure virtual |
Get IDs of all basic blocks in the structure.
node_ids
. [out] | node_ids | Container to which IDs are added. Previous contents of the container are not emptied by this call, so it should be emptied by the programmer before the call if desired. The programmer can use any implementation of DCFG_ID_CONTAINER: DCFG_ID_VECTOR, DCFG_ID_SET, etc. |
|
pure virtual |
Get list of in-bound edge IDs.
These are all edges such that the source node is not within the structure and the target node is within the structure. Note that this set contains all the edges that terminate within the structure, including returns from calls, interrupts, etc., not only those that are considered to "enter" the structure.
edge_ids
. [out] | edge_ids | Container to which IDs are added. Previous contents of the container are not emptied by this call, so it should be emptied by the programmer before the call if desired. The programmer can use any implementation of DCFG_ID_CONTAINER: DCFG_ID_VECTOR, DCFG_ID_SET, etc. |
|
pure virtual |
Get the total dynamic instruction count.
|
pure virtual |
Get per-thread dynamic instruction count.
[in] | thread_id | Thread number. Typically, threads are consecutively numbered from zero to DCFG_PROCESS::get_highest_thread_id(). |
|
pure virtual |
Get list of internal edge IDs.
These are all edges such that both the source and target nodes are within the structure.
edge_ids
. [out] | edge_ids | Container to which IDs are added. Previous contents of the container are not emptied by this call, so it should be emptied by the programmer before the call if desired. The programmer can use any implementation of DCFG_ID_CONTAINER: DCFG_ID_VECTOR, DCFG_ID_SET, etc. |
|
pure virtual |
Get list of out-bound edge IDs.
These are all edges such that the source node is within the structure and the target node is not within the structure. Note that this set contains all the edges that originate within the structure, including calls, interrupts, etc., not only those that are considered to "exit" the structure.
edge_ids
. [out] | edge_ids | Container to which edge IDs are added. Previous contents of the container are not emptied by this call, so it should be emptied by the programmer before the call if desired. The programmer can use any implementation of DCFG_ID_CONTAINER: DCFG_ID_VECTOR, DCFG_ID_SET, etc. |