Thanks for the tip DrakeFish, I'll be sure to do something like that once I understand the basics first.
Anyway, here is what I have done so far:

And some code in C#:
(it is c&p friendly, pending you know know how to add references [Black Magic 1.1 and Fasm_Managed])
Code:
using System;
using System.Collections.Generic;
using System.Text;
using Magic;
using System.Diagnostics;
namespace Memdit
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Memdit v" + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() + "...");
Console.WriteLine(new string('-', 60) + "\n");
BlackMagic bWoW = new BlackMagic();
Console.WriteLine("Waiting for World of Warcraft...");
while (!bWoW.OpenProcessAndThread(SProcess.GetProcessFromProcessName("wow")))
System.Threading.Thread.Sleep(1000);
Console.WriteLine("World of Warcraft found: {0} PID.", bWoW.ProcessId);
Process p = Process.GetProcessById(bWoW.ProcessId);
IntPtr n = p.MainModule.BaseAddress;
// player name
string strPlayerName = bWoW.ReadASCIIString((uint)n + 0x8A5C58, 255);
// hp
uint o1 = bWoW.ReadUInt((uint)n + 0x007A558C);
uint o2 = bWoW.ReadUInt(o1 + 0x4);
uint o3 = bWoW.ReadUInt(o2 + 0x24);
uint o4 = bWoW.ReadUInt(o3 + 0x42C);
uint o5 = bWoW.ReadUInt(o4 + 0x580);
uint o6 = bWoW.ReadUInt(o5 + 0x7D4);
uint o7 = bWoW.ReadUInt(o6 + 0xC);
// mp
uint oo1 = bWoW.ReadUInt(o3 + 0x7B0);
uint oo2 = bWoW.ReadUInt(oo1 + 0x1FC);
uint oo3 = bWoW.ReadUInt(oo2 + 0x7D4);
Console.WriteLine("\n\nName of character: {0}.", strPlayerName);
Console.WriteLine(new string('-', 60));
int[] hp = new int[2];
hp[0] = -1;
int[] mp = new int[2];
mp[0] = -1;
int nElapsed = 0;
while (true)
{
nElapsed++;
hp[1] = bWoW.ReadInt(o7 + 0x128);
mp[1] = bWoW.ReadInt(oo3 + 0x138);
if (hp[1] != hp[0] || mp[1] != mp[0])
{
Console.WriteLine("HP: {0} // MP: {1}", hp[1], mp[1]);
hp[0] = hp[1];
mp[0] = mp[1];
}
System.Threading.Thread.Sleep(1000);
}
}
}
}
This code requires you to be in game to work.
The pointers are static. I found them using Cheat Engine's pointer scanner. They don't change when you restart WoW...
Now some questions for you guys...
Cheat Engine returns hundreds of static pointers that I can traverse to get the HP and MP, for example:
(this is for MP)

They are all valid and don't change on restart. I chose one of those hundreds of paths (pictured above) to traverse to get my value for 'MP' (as seen in the code I posted).
Now, I'm probably doing this incorrectly and inefficiently. How should I correctly do this (returning HP and MP)? Should I be calling the LUA functions: GetUnitHealth()? If so, should I do something like this: http://www.mmowned.com/forums/world-...ple-stuff.html ?
And, instead of traversing HP and MP seperately (like I do in my C# code), how would I find the "player base" and use that to get HP and MP? e.g.
pointer_to_player_base + some_offset = hp
pointer_to_player_base + some_offset = mp
thanks again guys,
ddebug