DUMPBIN不显示所有功能

时间:2018-02-03 17:41:55

标签: c++ windows dll system-calls dumpbin

我在以下程序中使用了Microsoft Visual C ++的DUMPBIN实用程序。我确信对remove的调用最终会从DeleteFileW调用kernel32.dll的Microsoft系统调用(我使用其他工具确认此调用)。 那么为什么当我在以下程序的.EXE上应用DUMPBIN /imports时,我看不到DeleteFileW系统调用?

如何使用DeleteFileW查看DUMPBIN的系统调用?

谢谢, 吉拉德

#include "stdafx.h"
#include <iostream>
#include <chrono>
#include <thread>

using namespace std;

int main()
{
    const char* fileName = "gilad.txt";

    this_thread::sleep_for(chrono::milliseconds(10*1000));

    if (remove(fileName) != 0)
        cout << "Remove operation failed" << endl;
    else
        cout << *fileName << " has been removed." << endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

您的代码未致电DeleteFileW,而是致电remove。大概来自msvcrt.dll。是的,之后msvcrt.dll为您调用DeleteFileW,但该部分未出现在您的可执行文件中。

(并且dumpbin适用于单个文件,它不跟踪其他文件的依赖关系)

  

如何在DUMPBIN输出中看到“DeleteFileW”的系统调用?

您必须在实际引用dumpbin的文件上运行DeleteFileW。这不是上面的代码,而是您可以使用WinAPI创建的另一个代码,或仅作为实验,在msvcrt.dll上运行。

答案 1 :(得分:1)

想要提及一种不同的方法&#34;我采取了解决这个问题的方法:

(使用VS 2017的开发人员命令提示符)

1) 使用cl命令编译上述代码:

cl main.cpp

注意:为了直接从Developer Command Prompt编译它,我删除了第一行代码(#include "stdafx.h")。

2)输出&#34;几乎&#34;使用以下命令(假设您的exe被称为dumpbin并且您已使用以下命

main.exe

注意:myDumpbinOutput.txt消除了dumpbin /ALL /RAWDATA:NONE /OUT:myOutput.txt main.exe选项包含的RAWDATA(不需要)。

3)使用&#34;天真 ctrl + f &#34;文本编辑器(Notepead ++)到搜索,确实在输出的/RAWDATA:NONE导入部分下看到了您正在寻找的系统调用/ALL。 / p>

希望它有所帮助,

干杯,

盖。