Skip to content

Commit

Permalink
Add dyninstAPI/Parsing.h
Browse files Browse the repository at this point in the history
  • Loading branch information
hainest committed Apr 3, 2024
1 parent c314baf commit d2d6b36
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 8 deletions.
59 changes: 59 additions & 0 deletions docs/dyninstAPI/developer/Parsing.h.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,62 @@
Parsing.h
#########


.. cpp:class:: DynCFGFactory : public Dyninst::ParseAPI::CFGFactory

.. cpp:function:: DynCFGFactory(image *im)
.. cpp:function:: ~DynCFGFactory()
.. cpp:function:: Dyninst::ParseAPI::Function *mkfunc(Dyninst::Address addr, FuncSource src, std::string name, Dyninst::ParseAPI::CodeObject *obj, Dyninst::ParseAPI::CodeRegion *reg, Dyninst::InstructionSource *isrc)
.. cpp:function:: Dyninst::ParseAPI::Block *mkblock(Dyninst::ParseAPI::Function *f, Dyninst::ParseAPI::CodeRegion *r, Dyninst::Address addr)
.. cpp:function:: Dyninst::ParseAPI::Edge *mkedge(Dyninst::ParseAPI::Block *src, Dyninst::ParseAPI::Block *trg, EdgeTypeEnum type)
.. cpp:function:: Dyninst::ParseAPI::Block *mksink(Dyninst::ParseAPI::CodeObject *obj, Dyninst::ParseAPI::CodeRegion *r)
.. cpp:function:: void dump_stats()
.. cpp:member:: private boost::mutex _mtx
.. cpp:member:: private image *_img
.. cpp:member:: private std::vector<int> _func_allocs
.. cpp:member:: private std::vector<int> _edge_allocs
.. cpp:member:: private int _block_allocs
.. cpp:member:: private int _sink_block_allocs
.. cpp:function:: private void _record_func_alloc(Dyninst::ParseAPI::FuncSource fs)
.. cpp:function:: private void _record_edge_alloc(Dyninst::ParseAPI::EdgeTypeEnum et, bool sink)
.. cpp:function:: private void _record_block_alloc(bool sink)


.. cpp:class:: DynParseCallback : public Dyninst::ParseAPI::ParseCallback

.. cpp:function:: DynParseCallback(image *img)
.. cpp:function:: ~DynParseCallback()

......

.. rubric::
Defensive and exploratory mode callbacks

.. cpp:function:: protected virtual void abruptEnd_cf(Dyninst::Address, Dyninst::ParseAPI::Block *, default_details *)
.. cpp:function:: protected virtual void newfunction_retstatus(Dyninst::ParseAPI::Function *)
.. cpp:function:: protected virtual void patch_nop_jump(Dyninst::Address)
.. cpp:function:: protected virtual bool hasWeirdInsns(const Dyninst::ParseAPI::Function *) const
.. cpp:function:: protected virtual void foundWeirdInsns(Dyninst::ParseAPI::Function *)

......

.. rubric::
Other callbacks

.. cpp:function:: protected virtual void interproc_cf(Dyninst::ParseAPI::Function *, Dyninst::ParseAPI::Block *, Dyninst::Address, interproc_details *)
.. cpp:function:: protected virtual void overlapping_blocks(Dyninst::ParseAPI::Block *, Dyninst::ParseAPI::Block *)
.. cpp:function:: protected virtual bool updateCodeBytes(Dyninst::Address target)

updates if needed

.. cpp:function:: protected virtual void split_block_cb(Dyninst::ParseAPI::Block *, Dyninst::ParseAPI::Block *)

needed for defensive mode

.. cpp:function:: protected virtual void destroy_cb(Dyninst::ParseAPI::Block *)
.. cpp:function:: protected virtual void destroy_cb(Dyninst::ParseAPI::Edge *)
.. cpp:function:: protected virtual void destroy_cb(Dyninst::ParseAPI::Function *)
.. cpp:function:: protected virtual void remove_edge_cb(Dyninst::ParseAPI::Block *, Dyninst::ParseAPI::Edge *, edge_type_t)
.. cpp:function:: protected virtual void remove_block_cb(Dyninst::ParseAPI::Function *, Dyninst::ParseAPI::Block *)
.. cpp:function:: protected void instruction_cb(Dyninst::ParseAPI::Function *, Dyninst::ParseAPI::Block *, Dyninst::Address, insn_details *)
.. cpp:member:: private image *_img
11 changes: 3 additions & 8 deletions dyninstAPI/src/Parsing.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,11 @@
#include "parseAPI/h/ParseCallback.h"
#include "dyntypes.h"

// some useful types
using Dyninst::ParseAPI::EdgeTypeEnum;
using Dyninst::ParseAPI::FuncReturnStatus;
using Dyninst::ParseAPI::FuncSource;
using std::vector;

/*** The image_* object factory ***/
class image;

namespace Dyninst {
Expand All @@ -70,7 +68,6 @@ class DynCFGFactory : public Dyninst::ParseAPI::CFGFactory {

Dyninst::ParseAPI::Block * mksink(Dyninst::ParseAPI::CodeObject *obj, Dyninst::ParseAPI::CodeRegion*r);

// leaving default atm
//void free_func(Dyninst::ParseAPI::Function * f);
//void free_block(Dyninst::ParseAPI::Block * b);
//void free_edge(Dyninst::ParseAPI::Edge * e);
Expand All @@ -85,7 +82,7 @@ class DynCFGFactory : public Dyninst::ParseAPI::CFGFactory {
std::vector<int> _edge_allocs;
int _block_allocs;
int _sink_block_allocs;
//int _sink_edge_allocs; FIXME can't determine
//int _sink_edge_allocs;

void _record_func_alloc(Dyninst::ParseAPI::FuncSource fs)
{
Expand Down Expand Up @@ -115,18 +112,16 @@ class DynParseCallback : public Dyninst::ParseAPI::ParseCallback {
~DynParseCallback() { }

protected:
// defensive and exploratory mode callbacks
virtual void abruptEnd_cf(Dyninst::Address,Dyninst::ParseAPI::Block *,default_details*);
virtual void newfunction_retstatus(Dyninst::ParseAPI::Function*);
virtual void patch_nop_jump(Dyninst::Address);
virtual bool hasWeirdInsns(const Dyninst::ParseAPI::Function*) const;
virtual void foundWeirdInsns(Dyninst::ParseAPI::Function*);

// other callbacks
virtual void interproc_cf(Dyninst::ParseAPI::Function*,Dyninst::ParseAPI::Block*,Dyninst::Address,interproc_details*);
virtual void overlapping_blocks(Dyninst::ParseAPI::Block*,Dyninst::ParseAPI::Block*);
virtual bool updateCodeBytes(Dyninst::Address target); // updates if needed
virtual void split_block_cb(Dyninst::ParseAPI::Block *, Dyninst::ParseAPI::Block *); // needed for defensive mode
virtual bool updateCodeBytes(Dyninst::Address target);
virtual void split_block_cb(Dyninst::ParseAPI::Block *, Dyninst::ParseAPI::Block *);

virtual void destroy_cb(Dyninst::ParseAPI::Block *);
virtual void destroy_cb(Dyninst::ParseAPI::Edge *);
Expand Down

0 comments on commit d2d6b36

Please sign in to comment.