我在以下程序中使用了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;
}
答案 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>
希望它有所帮助,
干杯,
盖。