如何找到内置函数的定义位置?

时间:2019-05-23 07:52:15

标签: matlab shared-libraries reverse-engineering built-in function-definition

在MATLAB中,大约有3种方法来定义函数:非注释.m文件,.p文件和编译后的代码(例如DLL,MEX)。

了解其中的定义功能在某些情况下可能会有所帮助,例如,在我们控制范围之外的某个功能上引入了重大更改时,我们想尝试恢复为旧的希望使我们的代码再次工作的版本;或尝试反向工程某些未公开的算法时。

which函数通常非常擅长识别函数定义及其位置(适用于.m.p和MEX),但在涉及到共享库函数,(最多)它指向仅注释文档文件:

>> which _mcheck
built-in (undocumented)

>> which svd
built-in (D:\Program Files\MATLAB\R2019a\toolbox\matlab\matfun\svd)

如果是这样,假设在执行代码的过程中调用了在共享库中找到的函数,如何找到包含它的特定文件(DLL)

1 个答案:

答案 0 :(得分:6)

事实证明,dbstop可以用于此目的。例如:

>> which svd
built-in (D:\Program Files\MATLAB\R2019a\toolbox\matlab\matfun\svd)

>> dbstop svd
Warning: Entering debug mode is only supported within running MATLAB code files. 
Warning: MATLAB debugger can only stop in MATLAB code files, and "libmwmathlinalg>svd" is not a MATLAB code file.
         Instead, the debugger will stop at the point right before "libmwmathlinalg>svd" is called.

从那里开始,只需找到一个名为libmwmathlinalg(带有相关扩展名)的文件-如果对驱动器进行索引,这并不是一件困难的事情。