If you are just interested in a debug log, you could use IExec->SetFunction() :rtfm: to put in a couple of functions that print the args, calls the orginal function, then prints the results, for both IExec->AllocPooled() and IExec->FreePooled().
That way you don't need to know the internal layout. :-D
I personally haven't used SetFunction() on OS4, by the description it seems to be more relevent to pre OS4 libaries.
There is a hack you can use instead.
1) carefully write you function according to the prototypes in the interfaces drawer.
2) open the library (not needed for exec)
3) remember what the vector is (oldvector = IExec->AllocPooled;)
3) Set the vector for the function (IExec->AllocPooled = MyAllocPooled;)
4) do your stuff
5) restore the function pointer back to what is was (IExec->AllocPooled = oldvector;)
6) exit your program.
Remember that anything at anytime can call your new vector you might need to use a semaphore to make sure you prints don't get jumbled up.