导入函数列表视图

导入函数列表视图显示模块依赖关系树视图中当前所选模块的导入函数列表。导入函数是父模块在给定模块中实际调用的函数。

对于隐式和前向依赖关系,所选模块需要导出父级从其导入的每个函数。如果所选模块未导出父模块期望调用的其中一个函数,则在尝试加载模块时将发生无法解析的外部错误。请参阅导出功能列表视图以查看所选模块的导出函数。

Dependency Walker在导出的函数列表中搜索每个父导入函数,以确保匹配。如果任何函数未解析,则该函数标记有错误图像(见下文),并且模块在模块依赖关系树视图模块列表视图中也标记有错误图像。

导入函数列表视图还可以帮助您在应用程序中查找不必要的模块。父模块调用子模块的函数,因此父模块才依赖子模块。作为开发人员,如果您可以避免父模块调用给定模块的函数,那么父模块将不再依赖该模块。

C ++函数可以以其原生修饰方式或以未修饰易读的方式显示。

以下是导入列表中每个函数可能显示的图片:

    已解决的C导入函数。

     已解决的C ++导入函数。C ++函数可以以其原生修饰形式或以人类可读的未装饰形式查看。有关更多信息,请参阅Undecorate C ++函数命令。

     已解决的序号导入函数。

     已解决的动态C导入(C ++和序数函数也存在类似的图像)。该模块的父模块调用GetProcAddress函数来动态获取此函数的地址。这并不一定意味着父模块实际使用函数地址来调用函数。

     无法解析的C函数(C ++和序数函数也存在类似的图像)。此函数由父模块调用,但不从当前模块导出。这通常被称为“无法解析的外部符号”。如果此模块是隐式或前向依赖项,则父模块将无法加载。如果此模块是延迟加载依赖项,则父模块很可能从缺少依赖项中恢复,因为这是使用延迟加载依赖项的功能。

     无法解析的动态C函数(C ++和序数函数也存在类似的图像)。该模块的父模块调用GetProcAddress函数来动态获取该函数的地址,但当前模块不导出该函数。这不一定是错误,因为模块调用GetProcAddress的原因之一是查看模块中是否存在函数。
 


导入函数视图由五列组成:

 
图片有关说明,请参阅上面的列表。此列的标题中包含字母“PI”,它代表“父模块导入函数”
序号如果函数是按顺序导入的,则表示导入函数的序数值。如果按名称导入函数,则此值可以是“N / A”。
Hint导入函数的提示值。提示值由操作系统的加载程序在内部使用,以快速匹配导入和导出。它用作所选模块中导出函数数组的索引。
函数如果按名称导入函数,则表示导入函数的名称。如果函数是按顺序导入的,则可以是“N / A”。C ++函数可以以其原生修饰形式或以人类可读的未修饰形式查看。
入口点该函数的入口点内存地址。对于隐式和前向依赖关系,此字段通常显示为“未绑定”,这意味着在加载时间之前将不知道入口点地址。如果给出了地址,则父模块已经被BIND之类的程序预先绑定。绑定是遍历模块的导入列表及其所有相关模块的导出列表的过程,以便使用它引用的函数的绝对地址填充导入列表。这个作业通常由加载器在加载每个模块时完成,但如果模块已经预先绑定,则可以跳过。预绑定是一种优化,它根据模块的首选基址计算绝对地址,并将它们存储在模块的导入表中。假设给定模块的依赖性实际加载在其首选基址并且未更改,则加载器可以通过跳过绑定阶段到该依赖性模块来节省时间。对于动态依赖项,此入口点字段显示GetProcAddress函数调用返回的地址。


功能列表可以按列表中任何列中的数据进行排序。只需单击要排序的列的列标题按钮即可。列表(^)显示在列表当前排序的列的列标题中。您还可以通过双击列标题中两列之间的分隔线将列调整为“最佳拟合”宽度。只需键入要查找的项目的前几个字符,即可在当前已排序的列中搜索文本。对于序数和提示值,您可以输入十进制或十六进制(前缀为0x)值进行搜索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要在Django的视图中定义一个函数来渲染我们的HTML页面。我们可以使用`render()`函数来完成这个任务。`render()`函数接受三个参数:求对象、模板名称和上下文字典。上下文字典包含了我们渲染模板所需的数据。 在我们的博客系统中,我们需要显示所有博客文章的列表。因此,我们需要从数据库中获取所有的文章,并将它们传递给模板。我们可以使用Django的ORM(对象关系映射)来从数据库中获取这些文章。ORM可以将数据库表映射到Python类,从而允许我们使用Python代码来操作数据库。 这是一个基于函数视图的例子: ```python from django.shortcuts import render from .models import Post def post_list(request): posts = Post.objects.all() context = {'posts': posts} return render(request, 'blog/post_list.html', context) ``` 在这个例子中,我们从`models.py`文件中导入了`Post`模型类,这个模型类代表了我们的博客文章。`Post.objects.all()`返回了所有文章的QuerySet,我们将这个QuerySet存储在`posts`变量中。然后,我们创建了一个上下文字典,将`posts`变量作为值与`'posts'`键一起存储在其中。最后,我们将求对象、模板名称和上下文字典传递给`render()`函数,以便渲染模板。 在这个例子中,模板名称为`'blog/post_list.html'`,它指示Django在`blog`应用程序的`templates`目录下查找名为`'post_list.html'`的模板文件。我们将在下一篇文章中讨论如何编写这个模板文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值