This little code allow you to dump all player macro id, name, body and icon and check if it's character specific macro or not.
Thanks to Tanaris4 for the specific macro mask 
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace WowMacro
{
class Program
{
static void Main(string[] args)
{
Magic.BlackMagic BM = new Magic.BlackMagic();
BM.OpenProcessAndThread(Magic.SProcess.GetProcessFromProcessName("Wow"));
UInt32 Offset_nbGeneralMacros = 0x00BEAF50;
UInt32 Offset_nbSpecificMacros = 0x00BEAF54;
UInt32 Offset_Base = 0x00BEAF74;
UInt32 Offset_Next = 0x10;
UInt32 Offset_Name = 0x20;
UInt32 Offset_Icon = 0x60;
UInt32 Offset_Body = 0x160;
UInt32 Mask_IsCharSpecific = 0x1000000; // Tanaris4
Int32 nbGeneralMacros = BM.ReadInt(Offset_nbGeneralMacros);
Int32 nbSpecificMacros = BM.ReadInt(Offset_nbSpecificMacros);
Console.WriteLine("Found " + nbGeneralMacros + " general macros !");
Console.WriteLine("Found " + nbSpecificMacros + " specific macros !");
UInt32 Macro = BM.ReadUInt(Offset_Base);
while ((Macro & 1) == 0)
{
UInt32 Id = BM.ReadUInt(Macro);
String Name = BM.ReadASCIIString(Macro + Offset_Name, 16);
String Body = BM.ReadASCIIString(Macro + Offset_Body, 255);
String Icon = BM.ReadASCIIString(Macro + Offset_Icon, 255);
Boolean IsSpecific = false;
if ((Id & Mask_IsCharSpecific) != 0)
IsSpecific = true;
Console.WriteLine("Id : " + Id + " Name : " + Name + " Body : " + Body + " Icon : " + Icon + " IsSpecific : " + IsSpecific);
Macro = BM.ReadUInt(Macro + Offset_Next);
}
Console.ReadLine();
}
}
}