Что означают UNDEF и notype () при просмотре информации библиотеки C ++ с использованием dumpbin? - PullRequest
1 голос
/ 12 августа 2011

Я использовал dumpbin / symbols, чтобы увидеть созданную мной библиотеку. Некоторые функции имеют UNDEF notype на выходе. Что это значит? Есть ли ссылка для изучения структуры вывода дампа?

1 Ответ

4 голосов
/ 12 августа 2011

Мы можем взглянуть на документацию MSDN для dumpbin /SYMBOLS:

Эта опция отображает таблицу символов COFF. Таблицы символов существуют во всех объектные файлы. Таблица символов COFF появляется в файле изображения, только если она связан с /DEBUG.

Ниже приведено описание вывода для / SYMBOLS. дополнительный информацию о значении вывода / SYMBOLS можно найти, посмотрев в winnt.h (IMAGE_SYMBOL и IMAGE_AUX_SYMBOL) или в документации COFF.

Учитывая следующий пример дампа:

Dump of file main.obj
File Type: COFF OBJECT

COFF    SYMBOL    TABLE
000    00000000   DEBUG      notype      Filename      | .file
      main.cpp
002   000B1FDB   ABS      notype      Static      | @comp.id
003   00000000   SECT1      notype      Static      | .drectve
      Section length       26, #relocs   0, #linenums    0, checksum 722C964F
005   00000000   SECT2      notype      Static      | .text
      Section length      23, #relocs      1, #linenums    0, checksum 459FF65F, selection    1 (pick no duplicates)
007   00000000   SECT2      notype ()   External      | _main
008   00000000   UNDEF      notype ()   External      | ?MyDump@@YAXXZ (void __cdecl MyDump(void))

String Table Size = 0x10 bytes

Summary

      26 .drectve
      23 .text

Следующее описание для строк, начинающихся с номера символа, описывает столбцы с информацией, относящейся к пользователям:

Первым трехзначным числом является индекс / номер символа.

  • Если третий столбец содержит SECTx, символ определяется в этом раздел объектного файла. Но , если появляется UNDEF, он не определен в этот объект и должен быть разрешен в другом месте.

  • Пятый столбец (статический, внешний) указывает, является ли символ видимый только внутри этого объекта, или является ли он публичным (видимым внешне). Статический символ _sym не будет связан с публичным символ _sym; это будут два разных экземпляра функций с именем _sym.

  • Последний столбец в пронумерованной строке является именем символа, оба украшены и не украшены.

А notype() означает именно то, что написано на банке: у него нет типа.

...