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
lines.hpp File Reference

High level functions that deal with the generation of the disassembled text lines. More...

Classes

struct  user_defined_prefix_t
 Class to generate user-defined prefixes in the disassembly listing. More...
 

Macros

#define COLOR_ON   '\1'
 Escape character (ON). More...
 
#define COLOR_OFF   '\2'
 Escape character (OFF). More...
 
#define COLOR_ESC   '\3'
 Escape character (Quote next character). More...
 
#define COLOR_INV   '\4'
 Escape character (Inverse foreground and background colors). More...
 
#define SCOLOR_ON   "\1"
 Escape character (ON)
 
#define SCOLOR_OFF   "\2"
 Escape character (OFF)
 
#define SCOLOR_ESC   "\3"
 Escape character (Quote next character)
 
#define SCOLOR_INV   "\4"
 Escape character (Inverse colors)
 
#define COLOR_ADDR_SIZE   (sizeof(ea_t)*2)
 Size of a tagged address (see COLOR_ADDR)
 
#define SCOLOR_DEFAULT   "\x01"
 Default.
 
#define SCOLOR_REGCMT   "\x02"
 Regular comment.
 
#define SCOLOR_RPTCMT   "\x03"
 Repeatable comment (defined not here)
 
#define SCOLOR_AUTOCMT   "\x04"
 Automatic comment.
 
#define SCOLOR_INSN   "\x05"
 Instruction.
 
#define SCOLOR_DATNAME   "\x06"
 Dummy Data Name.
 
#define SCOLOR_DNAME   "\x07"
 Regular Data Name.
 
#define SCOLOR_DEMNAME   "\x08"
 Demangled Name.
 
#define SCOLOR_SYMBOL   "\x09"
 Punctuation.
 
#define SCOLOR_CHAR   "\x0A"
 Char constant in instruction.
 
#define SCOLOR_STRING   "\x0B"
 String constant in instruction.
 
#define SCOLOR_NUMBER   "\x0C"
 Numeric constant in instruction.
 
#define SCOLOR_VOIDOP   "\x0D"
 Void operand.
 
#define SCOLOR_CREF   "\x0E"
 Code reference.
 
#define SCOLOR_DREF   "\x0F"
 Data reference.
 
#define SCOLOR_CREFTAIL   "\x10"
 Code reference to tail byte.
 
#define SCOLOR_DREFTAIL   "\x11"
 Data reference to tail byte.
 
#define SCOLOR_ERROR   "\x12"
 Error or problem.
 
#define SCOLOR_PREFIX   "\x13"
 Line prefix.
 
#define SCOLOR_BINPREF   "\x14"
 Binary line prefix bytes.
 
#define SCOLOR_EXTRA   "\x15"
 Extra line.
 
#define SCOLOR_ALTOP   "\x16"
 Alternative operand.
 
#define SCOLOR_HIDNAME   "\x17"
 Hidden name.
 
#define SCOLOR_LIBNAME   "\x18"
 Library function name.
 
#define SCOLOR_LOCNAME   "\x19"
 Local variable name.
 
#define SCOLOR_CODNAME   "\x1A"
 Dummy code name.
 
#define SCOLOR_ASMDIR   "\x1B"
 Assembler directive.
 
#define SCOLOR_MACRO   "\x1C"
 Macro.
 
#define SCOLOR_DSTR   "\x1D"
 String constant in data directive.
 
#define SCOLOR_DCHAR   "\x1E"
 Char constant in data directive.
 
#define SCOLOR_DNUM   "\x1F"
 Numeric constant in data directive.
 
#define SCOLOR_KEYWORD   "\x20"
 Keywords.
 
#define SCOLOR_REG   "\x21"
 Register name.
 
#define SCOLOR_IMPNAME   "\x22"
 Imported name.
 
#define SCOLOR_SEGNAME   "\x23"
 Segment name.
 
#define SCOLOR_UNKNAME   "\x24"
 Dummy unknown name.
 
#define SCOLOR_CNAME   "\x25"
 Regular code name.
 
#define SCOLOR_UNAME   "\x26"
 Regular unknown name.
 
#define SCOLOR_COLLAPSED   "\x27"
 Collapsed line.
 
#define SCOLOR_ADDR   "\x28"
 Hidden address mark.
 
#define COLOR_DEFAULT   0x01
 Default.
 
#define COLOR_SELECTED   0x02
 Selected.
 
#define COLOR_LIBFUNC   0x03
 Library function.
 
#define COLOR_REGFUNC   0x04
 Regular function.
 
#define COLOR_CODE   0x05
 Single instruction.
 
#define COLOR_DATA   0x06
 Data bytes.
 
#define COLOR_UNKNOWN   0x07
 Unexplored byte.
 
#define COLOR_EXTERN   0x08
 External name definition segment.
 
#define COLOR_CURITEM   0x09
 Current item.
 
#define COLOR_CURLINE   0x0A
 Current line.
 
#define COLOR_HIDLINE   0x0B
 Hidden line.
 
#define COLOR_LUMFUNC   0x0C
 Lumina function.
 
#define COLOR_BG_MAX   0x0D
 Max color number.
 
#define PALETTE_SIZE   (COLOR_FG_MAX+COLOR_BG_MAX)
 
#define COLSTR(str, tag)   SCOLOR_ON tag str SCOLOR_OFF tag
 This macro is used to build colored string constants (e.g. More...
 

Typedefs

typedef uchar color_t
 color tag - see Color tags
 

Functions

THREAD_SAFE bool requires_color_esc (char c)
 Is the given char a color escape character?
 
idaman THREAD_SAFE void ida_export tag_addr (qstring *buf, ea_t ea, bool ins=false)
 Insert an address mark into a string. More...
 
idaman THREAD_SAFE const char *ida_export tag_advance (const char *line, int cnt)
 Move pointer to a 'line' to 'cnt' positions right. More...
 
idaman THREAD_SAFE const char *ida_export tag_skipcodes (const char *line)
 Move the pointer past all color codes. More...
 
idaman THREAD_SAFE const char *ida_export tag_skipcode (const char *line)
 Skip one color code. More...
 
idaman THREAD_SAFE ssize_t ida_export tag_strlen (const char *line)
 Calculate length of a colored string This function computes the length in unicode codepoints of a line. More...
 
idaman THREAD_SAFE ssize_t ida_export tag_remove (qstring *buf, const char *str, int init_level=0)
 Remove color escape sequences from a string. More...
 
THREAD_SAFE ssize_t idaapi tag_remove (qstring *buf, const qstring &str, int init_level=0)
 
THREAD_SAFE ssize_t idaapi tag_remove (qstring *buf, int init_level=0)
 
idaman color_t ida_export calc_prefix_color (ea_t ea)
 Get prefix color for line at 'ea'. More...
 
idaman bgcolor_t ida_export calc_bg_color (ea_t ea)
 Get background color for line at 'ea'. More...
 
Source files

IDA can keep information about source files used to create the program.

Each source file is represented by a range of addresses. A source file may contain several address ranges.

idaman bool ida_export add_sourcefile (ea_t ea1, ea_t ea2, const char *filename)
 Mark a range of address as belonging to a source file. More...
 
idaman const char *ida_export get_sourcefile (ea_t ea, range_t *bounds=nullptr)
 Get name of source file occupying the given address. More...
 
idaman bool ida_export del_sourcefile (ea_t ea)
 Delete information about the source file. More...
 
Generation of disassembled text
idaman bool ida_export install_user_defined_prefix (size_t prefix_len, struct user_defined_prefix_t *udp, const void *owner)
 User-defined line-prefixes are displayed just after the autogenerated line prefixes in the disassembly listing. More...
 

Variables

const color_t COLOR_DEFAULT = 0x01
 Default.
 
const color_t COLOR_REGCMT = 0x02
 Regular comment.
 
const color_t COLOR_RPTCMT = 0x03
 Repeatable comment (comment defined somewhere else)
 
const color_t COLOR_AUTOCMT = 0x04
 Automatic comment.
 
const color_t COLOR_INSN = 0x05
 Instruction.
 
const color_t COLOR_DATNAME = 0x06
 Dummy Data Name.
 
const color_t COLOR_DNAME = 0x07
 Regular Data Name.
 
const color_t COLOR_DEMNAME = 0x08
 Demangled Name.
 
const color_t COLOR_SYMBOL = 0x09
 Punctuation.
 
const color_t COLOR_CHAR = 0x0A
 Char constant in instruction.
 
const color_t COLOR_STRING = 0x0B
 String constant in instruction.
 
const color_t COLOR_NUMBER = 0x0C
 Numeric constant in instruction.
 
const color_t COLOR_VOIDOP = 0x0D
 Void operand.
 
const color_t COLOR_CREF = 0x0E
 Code reference.
 
const color_t COLOR_DREF = 0x0F
 Data reference.
 
const color_t COLOR_CREFTAIL = 0x10
 Code reference to tail byte.
 
const color_t COLOR_DREFTAIL = 0x11
 Data reference to tail byte.
 
const color_t COLOR_ERROR = 0x12
 Error or problem.
 
const color_t COLOR_PREFIX = 0x13
 Line prefix.
 
const color_t COLOR_BINPREF = 0x14
 Binary line prefix bytes.
 
const color_t COLOR_EXTRA = 0x15
 Extra line.
 
const color_t COLOR_ALTOP = 0x16
 Alternative operand.
 
const color_t COLOR_HIDNAME = 0x17
 Hidden name.
 
const color_t COLOR_LIBNAME = 0x18
 Library function name.
 
const color_t COLOR_LOCNAME = 0x19
 Local variable name.
 
const color_t COLOR_CODNAME = 0x1A
 Dummy code name.
 
const color_t COLOR_ASMDIR = 0x1B
 Assembler directive.
 
const color_t COLOR_MACRO = 0x1C
 Macro.
 
const color_t COLOR_DSTR = 0x1D
 String constant in data directive.
 
const color_t COLOR_DCHAR = 0x1E
 Char constant in data directive.
 
const color_t COLOR_DNUM = 0x1F
 Numeric constant in data directive.
 
const color_t COLOR_KEYWORD = 0x20
 Keywords.
 
const color_t COLOR_REG = 0x21
 Register name.
 
const color_t COLOR_IMPNAME = 0x22
 Imported name.
 
const color_t COLOR_SEGNAME = 0x23
 Segment name.
 
const color_t COLOR_UNKNAME = 0x24
 Dummy unknown name.
 
const color_t COLOR_CNAME = 0x25
 Regular code name.
 
const color_t COLOR_UNAME = 0x26
 Regular unknown name.
 
const color_t COLOR_COLLAPSED = 0x27
 Collapsed line.
 
const color_t COLOR_FG_MAX = 0x28
 Max color number.
 
const color_t COLOR_ADDR = COLOR_FG_MAX
 hidden address marks. More...
 
const color_t COLOR_OPND1 = COLOR_ADDR+1
 Instruction operand 1.
 
const color_t COLOR_OPND2 = COLOR_ADDR+2
 Instruction operand 2.
 
const color_t COLOR_OPND3 = COLOR_ADDR+3
 Instruction operand 3.
 
const color_t COLOR_OPND4 = COLOR_ADDR+4
 Instruction operand 4.
 
const color_t COLOR_OPND5 = COLOR_ADDR+5
 Instruction operand 5.
 
const color_t COLOR_OPND6 = COLOR_ADDR+6
 Instruction operand 6.
 
const color_t COLOR_OPND7 = COLOR_ADDR+7
 Instruction operand 7.
 
const color_t COLOR_OPND8 = COLOR_ADDR+8
 Instruction operand 8.
 
const color_t COLOR_RESERVED1 = COLOR_ADDR+11
 This tag is reserved for internal IDA use.
 
const color_t COLOR_LUMINA = COLOR_ADDR+12
 Lumina-related, only for the navigation band.
 

Anterior/Posterior lines

#define VEL_POST   0x01
 
#define VEL_CMT   0x02
 
idaman bool ida_export vadd_extra_line (ea_t ea, int vel_flags, const char *format, va_list va)
 See higher level functions below.
 
bool add_extra_line (ea_t ea, bool isprev, const char *format,...)
 Add anterior/posterior non-comment line(s). More...
 
bool add_extra_cmt (ea_t ea, bool isprev, const char *format,...)
 Add anterior/posterior comment line(s). More...
 
bool add_pgm_cmt (const char *format,...)
 Add anterior comment line(s) at the start of program. More...
 

Detailed Description

High level functions that deal with the generation of the disassembled text lines.

This file also contains definitions for the syntax highlighting.

Finally there are functions that deal with anterior/posterior user-defined lines.

Function Documentation

◆ calc_prefix_color()

idaman color_t ida_export calc_prefix_color ( ea_t  ea)

Get prefix color for line at 'ea'.

Returns
Line prefix colors

◆ calc_bg_color()

idaman bgcolor_t ida_export calc_bg_color ( ea_t  ea)

Get background color for line at 'ea'.

Returns
RGB color

◆ add_sourcefile()

idaman bool ida_export add_sourcefile ( ea_t  ea1,
ea_t  ea2,
const char *  filename 
)

Mark a range of address as belonging to a source file.

An address range may belong only to one source file. A source file may be represented by several address ranges.

Parameters
ea1linear address of start of the address range
ea2linear address of end of the address range (excluded)
filenamename of source file.
Returns
success

◆ get_sourcefile()

idaman const char *ida_export get_sourcefile ( ea_t  ea,
range_t bounds = nullptr 
)

Get name of source file occupying the given address.

Parameters
ealinear address
boundspointer to the output buffer with the address range for the current file. May be nullptr.
Returns
nullptr if source file information is not found, otherwise returns pointer to file name

◆ del_sourcefile()

idaman bool ida_export del_sourcefile ( ea_t  ea)

Delete information about the source file.

Parameters
ealinear address
Returns
success

◆ install_user_defined_prefix()

idaman bool ida_export install_user_defined_prefix ( size_t  prefix_len,
struct user_defined_prefix_t udp,
const void *  owner 
)

User-defined line-prefixes are displayed just after the autogenerated line prefixes in the disassembly listing.

There is no need to call this function explicitly. Use the user_defined_prefix_t class.

Parameters
prefix_lenprefixed length. if 0, then uninstall UDP
udpobject to generate user-defined prefix
ownerpointer to the plugin_t that owns UDP if non-nullptr, then the object will be uninstalled and destroyed when the plugin gets unloaded

◆ add_extra_line()

bool add_extra_line ( ea_t  ea,
bool  isprev,
const char *  format,
  ... 
)
inline

Add anterior/posterior non-comment line(s).

Parameters
ealinear address
isprevdo we add anterior lines? (0-no, posterior)
formatprintf() style format string. may contain \n to denote new lines.
Returns
true if success

◆ add_extra_cmt()

bool add_extra_cmt ( ea_t  ea,
bool  isprev,
const char *  format,
  ... 
)
inline

Add anterior/posterior comment line(s).

Parameters
ealinear address
isprevdo we add anterior lines? (0-no, posterior)
formatprintf() style format string. may contain \n to denote new lines. The resulting string should not contain comment characters (;), the kernel will add them automatically.
Returns
true if success

◆ add_pgm_cmt()

bool add_pgm_cmt ( const char *  format,
  ... 
)
inline

Add anterior comment line(s) at the start of program.

Parameters
formatprintf() style format string. may contain \n to denote new lines. The resulting string should not contain comment characters (;), the kernel will add them automatically.
Returns
true if success