Results 1 to 7 of 7

Thread: Convert IDA HexRays Decompiler source to working C source

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #7
    Private First Class
    Join Date
    Oct 2013
    Posts
    219
    Thanks
    56
    Thanked 105 Times in 66 Posts
    Some useful IDA macros I thought i'd dump here for future reference;
    Code:
    typedef unsigned int uint;
    typedef unsigned char uchar;
    typedef unsigned short ushort;
    typedef unsigned long ulong;
    
    // Partially defined types:
    #define _BYTE  char
    #define _WORD  short
    #define _DWORD long
    #define _QWORD ll
    #define _LONGLONG __int128
    
    #ifndef _WINDOWS_
    typedef char BYTE;
    typedef short WORD;
    typedef long DWORD;
    typedef long LONG;
    #endif
    typedef ll QWORD;
    #ifndef __cplusplus
    typedef int bool;       // we want to use bool in our C programs
    #endif
    
    // Some convenience macros to make partial accesses nicer
    // first unsigned macros:
    #define LOBYTE(x)   (*((_BYTE*)&(x)))   // low byte
    #define LOWORD(x)   (*((_WORD*)&(x)))   // low word
    #define LODWORD(x)  (*((_DWORD*)&(x)))  // low dword
    #define HIBYTE(x)   (*((_BYTE*)&(x)+1))
    #define HIWORD(x)   (*((_WORD*)&(x)+1))
    #define HIDWORD(x)  (*((_DWORD*)&(x)+1))
    #define BYTEn(x, n)   (*((_BYTE*)&(x)+n))
    #define WORDn(x, n)   (*((_WORD*)&(x)+n))
    #define BYTE1(x)   BYTEn(x,  1)         // byte 1 (counting from 0)
    #define BYTE2(x)   BYTEn(x,  2)
    #define BYTE3(x)   BYTEn(x,  3)
    #define BYTE4(x)   BYTEn(x,  4)
    #define BYTE5(x)   BYTEn(x,  5)
    #define BYTE6(x)   BYTEn(x,  6)
    #define BYTE7(x)   BYTEn(x,  7)
    #define BYTE8(x)   BYTEn(x,  8)
    #define BYTE9(x)   BYTEn(x,  9)
    #define BYTE10(x)  BYTEn(x, 10)
    #define BYTE11(x)  BYTEn(x, 11)
    #define BYTE12(x)  BYTEn(x, 12)
    #define BYTE13(x)  BYTEn(x, 13)
    #define BYTE14(x)  BYTEn(x, 14)
    #define BYTE15(x)  BYTEn(x, 15)
    #define WORD1(x)   WORDn(x,  1)
    #define WORD2(x)   WORDn(x,  2)         // third word of the object, unsigned
    #define WORD3(x)   WORDn(x,  3)
    #define WORD4(x)   WORDn(x,  4)
    #define WORD5(x)   WORDn(x,  5)
    #define WORD6(x)   WORDn(x,  6)
    #define WORD7(x)   WORDn(x,  7)
    
    // now signed macros (the same but with sign extension)
    #define SLOBYTE(x)   (*((char*)&(x)))
    #define SLOWORD(x)   (*((short*)&(x)))
    #define SLODWORD(x)  (*((long*)&(x)))
    #define SHIBYTE(x)   (*((char*)&(x)+1))
    #define SHIWORD(x)   (*((short*)&(x)+1))
    #define SHIDWORD(x)  (*((long*)&(x)+1))
    #define SBYTEn(x, n)   (*((char*)&(x)+n))
    #define SWORDn(x, n)   (*((short*)&(x)+n))
    #define SBYTE1(x)   SBYTEn(x,  1)
    #define SBYTE2(x)   SBYTEn(x,  2)
    #define SBYTE3(x)   SBYTEn(x,  3)
    #define SBYTE4(x)   SBYTEn(x,  4)
    #define SBYTE5(x)   SBYTEn(x,  5)
    #define SBYTE6(x)   SBYTEn(x,  6)
    #define SBYTE7(x)   SBYTEn(x,  7)
    #define SBYTE8(x)   SBYTEn(x,  8)
    #define SBYTE9(x)   SBYTEn(x,  9)
    #define SBYTE10(x)  SBYTEn(x, 10)
    #define SBYTE11(x)  SBYTEn(x, 11)
    #define SBYTE12(x)  SBYTEn(x, 12)
    #define SBYTE13(x)  SBYTEn(x, 13)
    #define SBYTE14(x)  SBYTEn(x, 14)
    #define SBYTE15(x)  SBYTEn(x, 15)
    #define SWORD1(x)   SWORDn(x,  1)
    #define SWORD2(x)   SWORDn(x,  2)
    #define SWORD3(x)   SWORDn(x,  3)
    #define SWORD4(x)   SWORDn(x,  4)
    #define SWORD5(x)   SWORDn(x,  5)
    #define SWORD6(x)   SWORDn(x,  6)
    #define SWORD7(x)   SWORDn(x,  7)

  2. The Following 5 Users Say Thank You to filthy_freak_ For This Useful Post:

    kubislav23 (29th September 2017),kung foo man (3rd May 2016),maxdamage99 (26th September 2016),voron00 (4th May 2016),Whiskas (3rd May 2016)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •