繁体   English   中英

如何反汇编.lib静态库?

[英]How to disassemble a .lib static library?

我在c中编写了这个简单的库:

library.h:

int sum(int a, int b);

LIBRARY.C:

#include "library.h"
int sum(int a, int b) {
    return a+b;
}

我用cl.exe(visual studio 2012)使用以下命令编译它:

cl /c /EHsc library.cpp
lib library.obj

它将其编译为静态链接.lib库文件。 现在我想看看编译器如何生成汇编代码,用于学习/学术目的。 请注意,我不想反编译它,我只想读取生成的程序集。 我试图用w32dasm打开.lib,但我得到了很多奇怪的符号,看起来工具无法读取文件。 我已经用动态链接库(从同一个源生成)完成了类似的任务,并且它有效; 因为我能够使用w32dasm查看汇编代码。 所以,我的问题是:可以像动态链接库那样查看静态链接库的汇编代码吗? 如果是这样,那么使用什么是正确的工具,因为w32dasm似乎不是正确的工具。

如果您确实想要反汇编库而不是查看编译器生成的汇编程序,可以使用DUMPBIN工具

dumpbin /disasm library.lib

IDA还可以处理静态库和目标文件(以及许多其他文件格式)。 免责声明:我为Hex-Rays工作。

这在技术上有点不同,因为它不会反汇编.lib文件,但对于大多数用途应该足够好:

您可以使用/FA开关,如详细说明这里 更确切地说,您可能希望使用/FAs ,它应该为包含程序集和源代码的每个源文件生成.asm文件,这有助于参考。 例如,如果将其添加到cl命令:

cl /c /EHsc /FAs library.cpp

除了正常的功能之外,这应该创建一个文件library.asm 这个文件可能包含很多东西,所以搜索它是个好主意。

如果您使用的是Visual Studio IDE,还可以设置断点,开始调试,然后右键单击源行并选择Go To Disassembly 此选项仅在调试期间显示在上下文菜单中,并且仅在中断期间处于活动状态,这就是设置断点很有用的原因,但您也可以手动中断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM