plugin: new simple findptr plugin
[ia32rtools.git] / ida / findptr / findptr.cpp
CommitLineData
3682b4b1 1/*
2 * ia32rtools
3 * (C) notaz, 2015
4 *
5 * This work is licensed under the terms of 3-clause BSD license.
6 * See COPYING file in the top-level directory.
7 */
8
9#define NO_OBSOLETE_FUNCS
10#include <ida.hpp>
11#include <idp.hpp>
12#include <bytes.hpp>
13#include <loader.hpp>
14#include <kernwin.hpp>
15
16//--------------------------------------------------------------------------
17static int idaapi init(void)
18{
19 return PLUGIN_OK;
20}
21
22//--------------------------------------------------------------------------
23static void idaapi term(void)
24{
25}
26
27//--------------------------------------------------------------------------
28
29static void idaapi run(int /*arg*/)
30{
31 bool found = false;
32 flags_t ea_flags;
33 uint32 val;
34 ea_t ea;
35
36 ea = get_screen_ea();
37 // msg("range: %x/%x-%x\n", ea, inf.minEA, inf.maxEA);
38
39 ea = next_unknown(ea, inf.maxEA);
40 for (; ea != BADADDR; ea = next_unknown(ea, inf.maxEA))
41 {
42 segment_t *seg = getseg(ea);
43 if (!seg)
44 break;
45 if (seg->type != SEG_DATA)
46 continue;
47
48 ea_flags = getFlags(ea);
49 if (!hasValue(ea_flags))
50 continue;
51 val = get_long(ea);
52 if (inf.minEA <= val && val < inf.maxEA) {
53 found = 1;
54 break;
55 }
56 }
57
58 if (found) {
59 // msg("%x: jmp\n", ea);
60 jumpto(ea);
61 }
62 else
63 msg("end reached.\n");
64}
65
66//--------------------------------------------------------------------------
67
68static const char comment[] = "Find next pointer-like data";
69static const char help[] = "Find next pointer-like data\n";
70static const char wanted_name[] = "Find next ptr-like";
71static const char wanted_hotkey[] = "Shift-N";
72
73//--------------------------------------------------------------------------
74//
75// PLUGIN DESCRIPTION BLOCK
76//
77//--------------------------------------------------------------------------
78plugin_t PLUGIN =
79{
80 IDP_INTERFACE_VERSION,
81 0, // plugin flags
82 init, // initialize
83 term, // terminate. this pointer may be NULL.
84 run, // invoke plugin
85 comment, // long comment about the plugin
86 // it could appear in the status line
87 // or as a hint
88 help, // multiline help about the plugin
89 wanted_name, // the preferred short name of the plugin
90 wanted_hotkey // the preferred hotkey to run the plugin
91};
92
93// vim:ts=2:shiftwidth=2:expandtab