Parent Import Function List View
The Parent Import Function List View displays the list of parent import functions for the currently selected module in the Module Dependency Tree View. Parent import functions are functions that are actually called in the given module by the parent module.
For implicit and forward dependencies, the selected module needs to export every function that the parent is importing from it. If the selected module does not export one of the functions that the parent module expects to call, then an unresolved external error will occur if the module is attempted to be loaded. See the Export Function List View for viewing the selected module's export functions.
Dependency Walker searches the exported function list for every parent import function to ensure there is a match. If any function is unresolved, then the function is marked with an error image (see below) and the module is mark with an error image as well in the Module Dependency Tree View and the Module List View.
The Parent Import Function List View can also help you locate unnecessary modules in an application. The fact that the parent module is calling functions in the selected module is what makes the selected module a dependency of the parent. As a developer, if you can safely stop the parent module from calling all the functions listed in the parent import function list for a given module, then that module will no longer be a dependent of the parent module.
C++ functions can be displayed in their native decorated format or in a human readable undecorated format. See the Undecorate C++ Functions Command for more information. You may also copy the selected function names to the clipboard by selecting the Copy Command. The actual text copied will differ depending on how the Undecorate C++ Functions option is set. If more than one function is selected, a list will be copied to the clipboard with carriage returns after each function. The complete contents of the Parent Import Function List View can also be saved to a text file using the Save Command or Save As Command.
The following are the primary images that can accompany each function in the parent import list:
|
|
Resolved C import. |
|
Resolved C++ import. C++ functions can be viewed in their native decorated form or in a human readable undecorated form. See the Undecorate C++ Functions Command for more information. |
|
Resolved ordinal import. |
|
Resolved dynamic C import (similar images also exist for C++ and ordinal functions). The parent module of this module called the GetProcAddress function to dynamically get the address of this function. This does not necessarily mean the parent module actually used the function address to call the function. |
|
Unresolved C function (similar images also exist for C++ and ordinal functions). This function is called by the parent module, but it is not exported from the current module. This is often referred to as an "unresolved external function". If this module is an implicit or forwarded dependency, then the parent module will fail to load. If this module is a delay-load dependency, then the parent module will most likely recover from the missing dependency, as that is a feature of using delay-load dependencies. |
|
Unresolved dynamic C function (similar images also exist for C++ and ordinal functions). The parent module of this module called the GetProcAddress function to dynamically get the address of this function, but the current module does not export the function. This is not necessarily an error since one of the reasons modules call GetProcAddress is to see if a function exists in a module. |
|
The Parent Import Function View is comprised of five columns:
|
Image |
See the above list for descriptions. The header for this column has the letters "PI" in it, which just stands for "Parent Imports" |
Ordinal |
The ordinal value of the imported function, if the function is imported by ordinal. This value can be "N/A" if the function is imported by name. |
Hint |
The hint value for the imported function. The hint value is used internally by the operating system's loader to quickly match imports with exports. It is used as an index into the array of exported functions in the selected module. |
Function |
The name of the imported function, if the function is imported by name. This can be "N/A" if the function is imported by ordinal. C++ functions can be viewed in their native decorated form or in a human readable undecorated form. See the
Undecorate C++ Functions Command for more information. You may also see "<invalid string>" as a function name, which means a call to GetProcAddress was made with an invalid string, or "<empty-string>", which means GetProcAddress was called with an empty string. |
Entry Point |
The entry point memory address for the function. For implicit and forward dependencies, this field often reads "Not Bound", which means that the entry point address will not be known until load time. If an address is given, then the parent module has been pre-bound by a program like BIND. Binding is the process of walking the import list of a module and the export list of all its dependent modules, in order to fill in the import list with the absolute addresses to the functions it references. This job is usually done by the loader as each module is loaded, but can be skipped if the modules have been pre-bound. Pre-binding is an optimization that calculates the absolute addresses based off of the modules' preferred base addresses and stores them in the module's import table. Assuming a dependency of a given module actually loads at its preferred base address and has not changed, then the loader can save time by skipping the bind phase to that dependency module. For dynamic dependencies, this Entry Point field displays the address returned by the GetProcAddress function call. |
|
The function list can be sorted on the data in any column in the list. Simply click on the column header button for the column you wish to sort by. An arrow (^) is displayed in the column header for the column that the list is currently sorted by. You can also size a column to its "best fit" width by double-clicking the divider line between two columns in the column header. You can search for text in the currently sorted column by simply typing in the first few characters of the item you wish to find. For ordinal and hint values, you may enter decimal or hex (prefaced by 0x) values to search for.