2015-12-02 3 views
2

Есть ли способ узнать, как DLL-файл был сгенерирован как VC++, C#, VB или что-то еще?Как проверить, как была создана dll?

EDIT: Я просто хочу узнать, как была создана моя dll, до сих пор я знаю, что это неуправляемый код, но не более того.

+0

Таким образом, определяют удалось против неуправляемый? Потому что C#/vb (предположим, Net) скомпилируются с одним и тем же ИЛ и поэтому не различимы) –

+0

Если вы можете открыть его с помощью ILDasm, то это DLL .net, так что это был компилятор .net, который сгенерировал его (скорее всего, либо C# или VB ... но не обязательно). Если ILDasm не открывает его, то это не dll .net. В этом случае, возможно, просмотр заголовка PE помогает https://en.wikipedia.org/wiki/Portable_Executable – gregkalapos

+2

@BradChristie [Они различимы] (http : //stackoverflow.com/q/33161188/41071), просто не полностью надежно. – svick

ответ

1

Есть четкие индикаторы, но нет абсолютного способа рассказать об этом, глядя на сборку или IL. У разных компиляторов есть способы подписи, в которых они решают некоторые проблемы, что позволяет вам хорошо догадаться, какой компилятор использовался для создания вывода. С Roslyn это стало сложнее для C# и VB.NET, поскольку они используют одну и ту же инфраструктуру компилятора.

Есть некоторые особенности языка, которые уникальны для языка, который может быть четким индикатором.

И есть набор ссылочных сборок для разных языков, которые используются при создании проектов из Visual Studio. Тем не менее, разработчик C# все еще может ссылаться на сборку Microsoft.VisualBasic, так что это тоже не обязательно. Кроме того, если ни одна из функций этих сборок не используется в коде, ссылка будет удалена во время компиляции.

Таким образом, нет четкого способа рассказать точный язык, используемый для создания кода. Это не атрибут сборки, он не хранится в заголовке или что-то еще.

Windows .dll или .exe-файл имеет PE-заголовок, он содержит некоторую информацию о типе проекта. Если он имеет CLR-заголовок, то он создан для среды выполнения .NET (вы все еще не знаете, что, но вы знаете его цель). Если искать общие зависимости (например, время выполнения VB) с помощью проверки зависимостей, вы можете предположить, что приложение было написано для VB6 или ранее.

Смотрите также:

+0

спасибо за информацию, это очень интересно, но я просто хочу знать, откуда я пришел, я не хочу иметь общий и верный способ догадаться об этом для всех dlls. – maazza

+0

Акс человек, который его создал. Это единственный реальный способ :) – jessehouwing

+0

Я не могу, и они не ответят мне, есть ли какие-то метаданные, которые я могу найти в dll? – maazza

Смежные вопросы