Latest available version: IDA and decompilers v8.4.240320sp1 see all releases
Hex-Rays logo State-of-the-art binary code analysis tools
email icon
hexrays_sample13.cpp
/*
* Hex-Rays Decompiler project
* Copyright (c) 2007-2024 by Hex-Rays, support@hex-rays.com
* ALL RIGHTS RESERVED.
*
* Sample plugin for Hex-Rays Decompiler.
* It generates microcode for selection and dumps it to the output window.
*/
#include <hexrays.hpp>
#include <frame.hpp>
//--------------------------------------------------------------------------
struct plugin_ctx_t : public plugmod_t
{
~plugin_ctx_t()
{
}
virtual bool idaapi run(size_t) override;
};
//--------------------------------------------------------------------------
bool idaapi plugin_ctx_t::run(size_t)
{
ea_t ea1, ea2;
if ( !read_range_selection(nullptr, &ea1, &ea2) )
{
warning("Please select a range of addresses to analyze");
return true;
}
flags64_t F = get_flags(ea1);
if ( !is_code(F) )
{
warning("The selected range must start with an instruction");
return true;
}
// generate microcode
mbr.ranges.push_back(range_t(ea1, ea2));
mba_t *mba = gen_microcode(mbr, &hf, nullptr, DECOMP_WARNINGS);
if ( mba == nullptr )
{
warning("%a: %s", hf.errea, hf.desc().c_str());
return true;
}
msg("Successfully generated microcode for %a..%a\n", ea1, ea2);
mba->print(vp);
// We must explicitly delete the microcode array
delete mba;
return true;
}
//--------------------------------------------------------------------------
static plugmod_t *idaapi init()
{
return nullptr; // no decompiler
const char *hxver = get_hexrays_version();
msg("Hex-rays version %s has been detected, %s ready to use\n",
hxver, PLUGIN.wanted_name);
return new plugin_ctx_t;
}
//--------------------------------------------------------------------------
static const char comment[] = "Sample13 plugin for Hex-Rays decompiler";
//--------------------------------------------------------------------------
//
// PLUGIN DESCRIPTION BLOCK
//
//--------------------------------------------------------------------------
plugin_t PLUGIN =
{
IDP_INTERFACE_VERSION,
PLUGIN_MULTI, // The plugin can work with multiple idbs in parallel
init, // initialize
nullptr,
nullptr,
comment, // long comment about the plugin
nullptr, // multiline help about the plugin
"Dump microcode for selected range", // the preferred short name of the plugin
nullptr, // the preferred hotkey to run the plugin
};
Micro block array (internal representation of the decompiled code).
Definition: hexrays.dox:59
void print(vd_printer_t &vp) const
Print microcode to any destination.
Definition: hexrays.hpp:11327
#define DECOMP_WARNINGS
display warnings in the output window
Definition: hexrays.hpp:7142
HexRays SDK header file.
bool init_hexrays_plugin(int flags=0)
Check that your plugin is compatible with hex-rays decompiler.
Definition: hexrays.hpp:8601
mba_t * gen_microcode(const mba_ranges_t &mbr, hexrays_failure_t *hf=nullptr, const mlist_t *retlist=nullptr, int decomp_flags=0, mba_maturity_t reqmat=MMAT_GLBOPT3)
Generate microcode of an arbitrary code snippet.
Definition: hexrays.hpp:12319
void term_hexrays_plugin()
Stop working with hex-rays decompiler.
Definition: hexrays.hpp:8609
const char * get_hexrays_version()
Get decompiler version.
Definition: hexrays.hpp:11511
Exception object: decompiler failure information.
Definition: hexrays.hpp:5442
ea_t errea
associated address
Definition: hexrays.hpp:5444
Ranges to decompile. Either a function or an explicit vector of ranges.
Definition: hexrays.hpp:4362
rangevec_t ranges
snippet mode: ranges to decompile.
Definition: hexrays.hpp:4364
Base helper class to convert binary data structures into text.
Definition: hexrays.hpp:849