File Exchange

image thumbnail

MxArrayDefinition

version 1.0.0.0 (17 KB) by Andrew
Creates a C style definition of an mxArray (for use in mex applications)

1 Download

Updated 01 May 2014

View License

This function attempts to programmatically determine a suitable definition of the mxArray structure. This is intended to allow the user explore the workings of MATLAB's mxArray, and to facilitate using undocumented methods in MEX functions.
This function analyses the mxArray by first finding its size, and then examines changes to the bytes of mxArray after the mxArray is modified in MATLAB. In some cases the byte pattern from two mxArrays are compared to determine which mxArray properties are represented by which bytes. The approach was motivated the method described at:
http://undocumentedmatlab.com/blog/matlabs-internal-memory-representation

Due to the may it works, it may fail to find members of the mxArray occasionally. If it missed something, try it again xD.

The output should look like the examples included: mxInternals_R2010A.h and mxInternals_R2013B.h

WARNING: This function attempts to read data from memory pointers that may not been valid - this may crash MATLAB, so SAVE ALL WORK BEFORE RUNNING. If that happens - don't panick, just restart Matlab and try again. It has been tested for:
R2013B
R2012B
R2010A
(some windows, some unix).

DISCLAIMER - This function has NOT been tested on a BIG endian machine. While I've attempted to make the program compatible with big endian machines, I can't test it. So if you have one, I'd love to know if it works!

ACKNOWLEDGEMENTS
The early mxArray investigation done by
Peter Boetcher, James Tursa, Bruno Luong, Joshua Dillon and all else involved.
Yair Altman, Peter Li, and "Martin":
http://undocumentedmatlab.com/blog/matlabs-internal-memory-representation

Cite As

Andrew (2021). MxArrayDefinition (https://www.mathworks.com/matlabcentral/fileexchange/46427-mxarraydefinition), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (1)

Klamer

The generated file states that it does not know how pFieldNames is stored.

On /* Matlab version: R2010b */
/* Computer: PCWIN64 */
this pointer seems to point to a struct like:
struct FieldNames
{
int nrFields;
int dummy; /* value 1 */
char dummy2[8];
char *fieldNamePtr[];
};

with fieldNamePtr pointing to a zero-terminated string.

MATLAB Release Compatibility
Created with R2013b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!