Как Windows дифференцируется между регулярным EXE и.NET exe?

Вы перебираете не тот объект.

Не забывайте, что json.loads(json_data) возвращает объект, как он хранится. В вашем случае это диктат только с одним элементом: 'playlist'. Вы должны получить доступ к этому элементу с помощью loaded_json['playlist'], а затем перебрать список воспроизведения.

Здесь loaded_json относится к типу Dict[List[Dict]]. Будьте осторожны с JSON и вложенными структурами данных.

Попробуйте:

loaded_json= json.loads(json_data)       #type: Dict[List[dict]]
for playlist in loaded_json['playlist']: #type: dict
    print('{}\n'.format(playlist['name']))

Сделав это, вы получите название всего списка воспроизведения.

Документация: Кодер и декодер JSON

28
задан Cole Johnson 3 April 2013 в 23:08
поделиться

3 ответа

Хотя я согласен с GregC в целом, бывают случаи, когда этот тип информации полезен. Но это один сложный вопрос, на который следует ожидать ответа в интервью (если только это не для команды CLR:)

Веб-страницы и блоги ...

Книги ...

6
ответ дан Matthew Whited 28 November 2019 в 03:49
поделиться

Я думаю, что следующие две ссылки являются хорошим ресурсом для понимания структуры PE файлов и загрузчика Windows.

Точная цитата из статьи March 2002, которая, как мне кажется, отвечает на ваш вопрос, звучит так:

Основная цель .NET исполняемого файла является получение специфической для .NET информацию, такую как метаданные и промежуточный язык (IL) в память. Кроме того, исполняемый файл .NET исполняемый файл связывается с MSCOREE.DLL. Эта DLL является начальной точкой для процесса .NET. Когда исполняемый файл .NET загружается, его точка входа обычно представляет собой крошечную заглушку кода. кода. Эта заглушка просто переходит к экспортированной функции в MSCOREE.DLL (_CorExeMain или _CorDllMain). С там MSCOREE берет на себя ответственность и начинает использовать метаданные и IL из исполняемого файла. Эта установка похожа на то, как приложения на Visual Basic (до появления .NET) использовали MSVBVM60.DLL.

16
ответ дан 28 November 2019 в 03:49
поделиться

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

Для XP и более поздних версий загрузчик ОС расширен для обнаружения управляемых сборок на основе записи каталога PE, если присутствует запись в каталоге, загрузчик автоматически загружает mscoree.dll, и выполняется переход к функции в mscoree, _CorExeMain (2) для исполняемых файлов и _CorDllMain для dll. Затем _CorExeMain отвечает за загрузку среды CLR и запуск выполнения управляемого кода.

Я использовал следующее, чтобы напомнить себе об именах точек входа ...

C:\Windows\System32>dumpbin -exports mscoree.dll
Microsoft (R) COFF/PE Dumper Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file mscoree.dll

File Type: DLL

  Section contains the following exports for mscoree.dll

    00000000 characteristics
    4AF3AF84 time date stamp Fri Nov 06 07:09:24 2009
        0.00 version
          17 ordinal base
         126 number of functions
         123 number of names

    ordinal hint RVA      name

         38    0 0001AAA0 CLRCreateInstance
... Lots of stuff left out...
        136   76 00015030 _CorDllMain
        138   77 00004DDB _CorExeMain
        137   78 0001A981 _CorExeMain2
        139   79 0002033B _CorImageUnloading
        140   7A 000042D0 _CorValidateImage
         24      00008017 [NONAME]
        142      00014C4D [NONAME]

  Summary

        4000 .data
        4000 .reloc
        1000 .rsrc
       40000 .text
3
ответ дан 28 November 2019 в 03:49
поделиться
Другие вопросы по тегам:

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