DUMPBIN не показывает все функции

я использовал 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;
}

0

Решение

Ваш код не звонит DeleteFileWэто вызывает remove, Предположительно из msvcrt.dll, Да, после этого msvcrt.dll звонки DeleteFileW для вас, но эта часть не появляется в вашем исполняемом файле.

(А также dumpbin работает на одном файле, он не отслеживает зависимости других файлов)

Как я вижу системный вызов «DeleteFileW» в выводе DUMPBIN?

Вам бы пришлось бежать dumpbin на файл на самом деле ссылаясь DeleteFileW, Это не код выше, но другой, который вы можете создать с помощью WinAPI, или просто в качестве эксперимента запустите его msvcrt.dll,

2

Другие решения

Хотел упомянуть другой «подход», который я выбрал для решения этой проблемы:

(Использование командной строки разработчика для 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.

1

По вопросам рекламы [email protected]