matlab - 如何定位内置函数的定义位置?

标签 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)

最佳答案

事实证明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 的文件(具有相关扩展名)——如果您的驱动器已编入索引,这不是一项艰巨的任务。

关于matlab - 如何定位内置函数的定义位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56270462/

相关文章:

matlab - 禁止 MATLAB 自动获取焦点

android - 将 C/C++ 程序移植到 Android 中

linux - 为什么使用共享库时 Linux 上的应用程序启动速度较慢?

C++ __usercall Hook

matlab - 如果发生错误,如何跳过 `for`循环索引

matlab - 在matlab中查找矩阵所有列之间的公共(public)元素

matlab - 如何在 MATLAB 中绘制等高线图的等高线上放置字符串标签

linux - 共享对象库和 MPI

reverse-engineering - 如何在 IDA Pro 中设置数组元素的大小?

java - 将.class文件转换为smali文件并重新打包.apk