Union tutorial
Suppose the source text looked like this:
#include <stdlib.h>
union urecord_t
{
char c;
short s;
long l;
};
struct record_t
{
int type;
#define RTYPE_CHAR 0
#define RTYPE_SHORT 1
#define RTYPE_LONG 2
urecord_t u;
};
bool is_negative(record_t *r)
{
switch ( r->type )
{
case RTYPE_CHAR: return r->u.c < 0;
case RTYPE_SHORT: return r->u.s < 0;
case RTYPE_LONG: return r->u.l < 0;
}
abort();
}
We have a disassembly like this:

Let’s improve it with unions. First, let’s define an union type. For this we open the Local types view (menu View|Local types), press Ins to create an union.
We create the union using the "C syntax" tab of the "Add type" dialog:

Switching to the disassembly window, we apply the defined structure through the Edit|Operand types|Struct offset menu item and select the proper representation for the operand. In the union type case, it may be necessary to select the desired union member with the Edit|Structs|Select union member command. The final disassembly looks like this:

That’s all folks !
Last updated
Was this helpful?