What does UNDEF and notype() mean when seeing the C++ library information using dumpbin?

前端 未结 1 1416
不思量自难忘°
不思量自难忘° 2021-01-24 03:53

I used dumpbin /symbols to see the library I created. Some functions have UNDEF notype in the output. What does that mean? Is there any li

1条回答
  •  孤独总比滥情好
    2021-01-24 03:56

    We can take a look at the MSDN documentation for dumpbin /SYMBOLS:

    This option displays the COFF symbol table. Symbol tables exist in all object files. A COFF symbol table appears in an image file only if it is linked with /DEBUG.

    The following is a description of the output for /SYMBOLS. Additional information on the meaning of /SYMBOLS output can be found by looking in winnt.h (IMAGE_SYMBOL and IMAGE_AUX_SYMBOL), or COFF documentation.

    Given the following sample dump:

    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
    

    The following description, for lines that begin with a symbol number, describes columns that have information relevant to users:

    The first three-digit number is the symbol index/number.

    • If the third column contains SECTx, the symbol is defined in that section of the object file. But if UNDEF appears, it is not defined in that object and must be resolved elsewhere.

    • The fifth column (Static, External) tells whether the symbol is visible only within that object, or whether it is public (visible externally). A Static symbol, _sym, wouldn't be linked to a Public symbol _sym; these would be two different instances of functions named _sym.

    • The last column in a numbered line is the symbol name, both decorated and undecorated.

    And notype() means exactly what it says on the tin: it has no type.

    0 讨论(0)
提交回复
热议问题