я использовал DUMPBIN
Утилита Microsoft Visual C ++ для следующей программы. Я точно знаю, что звонок remove
в конце концов вызывает системный вызов Microsoft DeleteFileW
от kernel32.dll
(Я подтверждаю этот звонок другим инструментом).
Так почему, когда я применяю DUMPBIN /imports
на .EXE следующей программы я не вижу 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;
}
Ваш код не звонит DeleteFileW
это вызывает remove
, Предположительно из msvcrt.dll
, Да, после этого msvcrt.dll
звонки DeleteFileW
для вас, но эта часть не появляется в вашем исполняемом файле.
(А также dumpbin
работает на одном файле, он не отслеживает зависимости других файлов)
Как я вижу системный вызов «DeleteFileW» в выводе DUMPBIN?
Вам бы пришлось бежать dumpbin
на файл на самом деле ссылаясь DeleteFileW
, Это не код выше, но другой, который вы можете создать с помощью WinAPI, или просто в качестве эксперимента запустите его msvcrt.dll
,
Хотел упомянуть другой «подход», который я выбрал для решения этой проблемы:
(Использование командной строки разработчика для VS 2017)
1) скомпилированный приведенный выше код с использованием cl
команда:
cl main.cpp
Примечание: чтобы скомпилировать его прямо из командной строки разработчика, я удалил первую строку кода (#include "stdafx.h"
).
2) Выход «почти» все возможные результаты dumpbin
утилита, использующая следующую команду (при условии, что ваш exe-файл называется main.exe
и вы создали выходной текстовый файл с именем myDumpbinOutput.txt
) используя команду:
dumpbin /ALL /RAWDATA:NONE /OUT:myOutput.txt main.exe
Обратите внимание /RAWDATA:NONE
устраняет RAWDATA, что /ALL
опция включает в себя (нет необходимости для этого).
3) Б «наивный Ctrl+етекстового редактора (Notepead ++) для поиск,и действительно видел вызов системного вызова, который вы искали, DeleteFileW
под KERNEL32.dll
Импорт раздела вывода.
Надеюсь, поможет,
Ура,
Guy.