It's often been said that there's no static pointer to WoW's object list on the Mac, but I've found one that works (for patch 3.2.0a, anyway):
OBJECT_LIST_LL_PTR = 0x1255A6C
The value at [[OBJECT_LIST_LL_PTR] + 0x1C] points to the head of the object list. This changes every time the game world is loaded, but it's easy to detect that and act accordingly.
Once you have that pointer, iterating through the list is easy. It seems to be similar to, but not exactly the same as, many of the other linked lists WoW uses internally.
The base list is a repeating structure of 3 int32s which looks like this:
0x0: should be 0x18, if not, you've reached the end
0x4: pointer to an object + 0x18
0x8: pointer to another object
One thing to watch out for is that many of the object pointers will be erroneous and will need to be ignored by your code, but I'll leave that problem to you.
Unfortunately this list doesn't actually contain every object in range of the player. In fact, quite often the player object itself will be missing. After scanning the initial list of object pointers (as above), your code needs to examine each object individually - each object contains a pointer to the 'next' object in memory at [object base + 0x34].
With all of that in mind, it's fairly simple to implement a kind of 'depth scan' which can find every object in memory. It may not be as fast as hooking WoW directly, but it's certainly safer & more practical on OS X, and is fast enough for my needs (I have a Python class which can read the entire list in <50ms).
Object Names
One common requirement is to read the names of nodes, NPCs and other players around you. This is a real pain in the arse because WoW keeps names separate from the base object structures.
Nodes: there's a structure at [object base + 0x408] containing the node name at 0x90 (e.g. Copper Vein) as a nul-terminated string.
Units: there's a structure at [object base + 0x95C] containing the unit name at 0x5C and description at 0x4 (e.g. Alanura Firecloud, Poisons & Reagents), again as nul-terminated strings.
Players are more complicated. WoW stores player and guild names in linked lists. You have to scan through these lists to find what you need. Player names are associated by GUID, and guild names are associated by guild ID. You'll need these:
PLAYER_NAMES_LL_PTR = 0x151C2C4
GUILD_NAMES_LL_PTR = 0x151C224
Reading these lists is very similar to reading the object list, with a few subtle differences which I'll let you discover for yourself.
Hope this helped someone.