Можно ли использовать Отражатель, чтобы получить исходный код приложения и затем отладить использование тот исходный код?

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

  • Недопустимый доступ может быть жесткой ошибкой (часто SIGBUS).
  • Неравномерный доступ может быть мягкой ошибкой. Либо исправлено в аппаратном обеспечении, либо для снижения производительности. Или исправлено путем эмуляции в программном обеспечении, для серьезной деградации производительности. Кроме того, атомарность и другие гарантии параллелизма могут быть нарушены, что приводит к незначительным ошибкам.

Вот пример использования типичных настроек для процессора x86 (все используемые 32 и 64-битные режимы):

struct X
{
    short s; /* 2 bytes */
             /* 2 padding bytes */
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 3 padding bytes */
};

struct Y
{
    int   i; /* 4 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
    short s; /* 2 bytes */
};

struct Z
{
    int   i; /* 4 bytes */
    short s; /* 2 bytes */
    char  c; /* 1 byte */
             /* 1 padding byte */
};

const int sizeX = sizeof(struct X); /* = 12 */
const int sizeY = sizeof(struct Y); /* = 8 */
const int sizeZ = sizeof(struct Z); /* = 8 */

Можно минимизировать размер структур путем сортировки (например, структура Z в приведенном выше примере).

ВАЖНОЕ ЗАМЕЧАНИЕ: В стандартах C и C ++ указано, что выравнивание структуры определяется реализацией , Поэтому каждый компилятор может выбрать выравнивание данных по-разному, что приводит к разным и несовместимым макетам данных. По этой причине при работе с библиотеками, которые будут использоваться разными компиляторами, важно понять, как компиляторы выравнивают данные. Некоторые компиляторы имеют параметры командной строки и / или специальные #pragma операторы для изменения настроек выравнивания структуры.

10
задан skb 20 September 2008 в 04:42
поделиться

7 ответов

Reflector Pro позволяет вам делать именно это!

3
ответ дан 3 December 2019 в 21:24
поделиться

Плагин Deblector для Отражателя позволяет Вам отлаживать прямо от Отражателя.

5
ответ дан 3 December 2019 в 21:24
поделиться

Я не могу найти ссылку, но кто-то действительно использовал источник отражателя для компиляции отладочной версии 1,1 платформ, мог ступить через. Я попробовал 2,0 платформами и нашел слишком много ошибок не остаться в долгу.

Если требуется попробовать этот запуск плагином как FileDisassembler. В моем кратком опыте с этим я нашел, что были некоторые ошибки прикрепить, но не к плохо.

С библиотекой маленького среднего размера этот метод должен быть очень выполнимым.

3
ответ дан 3 December 2019 в 21:24
поделиться

Я попробовал это давным-давно без успеха. Отражатель улучшился много с тех пор, таким образом, я предполагаю, что это может быть возможно сегодня.

Это на самом деле довольно страшно, если Вы думаете об этом. Кто-то мог декомпилировать Ваше приложение и иметь полный код, затем изменить его и распределить их собственную версию его. Все, не будучи открытым исходным кодом. Но с другой стороны вот почему "они" создали obfuscators.

4
ответ дан 3 December 2019 в 21:24
поделиться

Нет, Вам нужен файл символов (.PDB) файл, который принадлежит приложению, которое Вы пытаетесь отладить.

Отражатель позволяет Вам идти от IL до читаемого кода.NET, но он поддерживает значение только не точный код, как записано разработчиком. Таким образом, даже если бы у Вас были PDB и источник от Отражателя, то он не совпал бы для отладки.

Я предполагаю, что Вы могли использовать исходный вывод от отражателя, чтобы создать проект.NET и генерировать Вашу собственную версию блока, который Вы хотите отладить. Это обычно - реальная боль, хотя и в случае платформы.NET Microsoft публикует отладочную информацию для использования любым, кому интересно.

Я помню однажды был плагин для отладки в Отражателе, но я никогда не мог заставлять это работать.

Конфигурирование Visual Studio для отладки исходного кода платформы.NET
MSDN: файлы PDB

1
ответ дан 3 December 2019 в 21:24
поделиться

Я видел его и сделал его прежде. Я использовал его, чтобы показать моему боссу, что наше приложение не было столь защищено, как он думал, что это было. Взял DLL, получил исходный код и обман - у него практически был сердечный приступ.

Существуют сценарии, где.Net Reflector ломается, но трудно сделать так - я знаю, потому что я активно попробовал. Хороший obfuscators сделает код так неуправляемым / нечитабельный (как перегрузка функция, чтобы сделать тонну различных вещей на основе параметров), что наблюдение источника делает Вас отрицательный результат, но можно все еще отладить - удача, выясняющая, что продолжается.

1
ответ дан 3 December 2019 в 21:24
поделиться

Это возможно, но не действительно практично в больших более сложных приложениях, особенно когда много более свежих структур как лямбды и инициализаторы использовалось (Вы получаете целый набор имен переменной, содержащих знаки доллара как $4 CS$0000, которые должны быть зафиксированы вручную). Даже простые операторы переключения могут вызвать некоторый очень ужасный запутанный код, полный операторов перехода в Отражателе.

У меня было намного больше удачи при декомпиляции к MSIL и перекомпиляции в режиме отладки. Можно затем поместить точки останова в файлы IL и использовать все обычные функции отладчика в VS. MSIL выглядит немного страшным сначала, но Вы приобретаете навык его довольно быстро.

Эта превосходная статья объясняет, как сделать это: http://www.codeproject.com/KB/dotnet/Debug_Framework_Classes.aspx

0
ответ дан 3 December 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: