gpt4 book ai didi

user-defined-functions - 如何从编译文件中区分用户定义/库函数?

转载 作者:行者123 更新时间:2023-12-04 15:47:50 26 4
gpt4 key购买 nike

编辑 :

我要的是区分静态链接 库函数和 用户自编 功能 编译后的文件(例如 PE 文件)。

如何做到这一点? (我正在考虑数据库比较,但我不知道任何数据库。)

顺便说一句,(在问这个问题之前我早就知道了)对于动态链接的库函数,它们只是(PE 的)导入表中的一个条目。

通过库函数,我的意思是那些在库中定义的函数,例如 STL(我知道这是一个不好的名字)。

用户定义的函数是指那些由个别程序员编写的函数。

有没有任何程序化的方式来实现这个目标?

现在我正在考虑将二进制文件与数据库进行比较,但到目前为止我还不知道任何数据库。

请推荐一个数据库或其他方式作为答案。谢谢你。

最佳答案

这个答案是假设您想分析一个标准的 Windows 可执行文件,该文件与其他导入库(.lib 和非静态链接的相关 .dll 文件)动态链接,如果是这种情况,您想要解释 PE(可移植可执行文件)文件结构。

这是一个 good article让您开始,使用有关转储 PE header 的示例代码。

您需要关注用于外部库调用的导入表(.idata 部分),以及用于在可执行文件中定义并标记为可导出(通常只存在于 .dll 文件中)的调用的导出表(.edata 部分)。

对于静态库,它们的格式称为 COFF,还有 DUMPBIN Visual Studio 附带的实用程序,您可以使用它来快速查看 lib 文件,甚至可以根据需要转储代码的反汇编。

The DUMPBIN utility, which is provided with the 32-bit version of Microsoft Visual C++, combines the abilities of the LINK, LIB, and EXEHDR utilities. The combination of these tools features the ability to provide information about the format and symbols provided in executable, library, and DLL files.



有关 COFF 文件结构的信息,请参阅此 article .

确定函数调用是否来自 lib 会很棘手,但据我所知,代码中的大多数静态 lib 调用实际上是 thunk 调用(对从 lib 复制的实际目标代码的简单 jmp 调用)并且很小大小(通常大约 5 个字节),而“用户定义”的不是 thunk,而是基于 bp 的框架调用。

关于user-defined-functions - 如何从编译文件中区分用户定义/库函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com