首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不需要任何依赖或导入的可移植可执行文件

不需要任何依赖或导入的可移植可执行文件
EN

Stack Overflow用户
提问于 2021-02-01 19:15:29
回答 1查看 174关注 0票数 0

我的电脑上安装了一个程序。当我用CFF Explorer检查它时,我看不到任何导入或依赖项。它可能是用Delphi编写的。那么这种PE是如何工作的呢?该程序的作者似乎想隐藏使用了哪些系统DLL。我可以在我自己的Visual Studio C/C ++环境中构建这样的PE文件吗?

在CFF EXplorer中,PE文件如下所示:

编辑:这是PE Explorer的屏幕截图。PE Explorer还说没有依赖关系。

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 20:13:55

在没有导入的情况下生成可执行文件是非常容易的。因为这是关于Windows的,所以我将给出一个使用MSVC的示例。

您所需要做的就是转到项目Properties -> Linker -> Input并将Ignore All Default Libraries设置为Yes /NODEFAULTLIB

您需要提供自己的mainCRTstartup版本,这是由MSVC设置的入口点的默认名称。您可以通过转到项目属性、链接器、->高级并将Entry Point设置为要用作入口点的函数的名称来更改此设置。

或者,从命令行直接使用cl.execl.exe main.c /link /NODEFAULTLIB /ENTRY:"main"。完整示例:

代码语言:javascript
复制
$ more main.c
int main()
{
    return 0;
}

$ cl.exe main.c /link /NODEFAULTLIB /ENTRY:"main"
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29333 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

main.c
Microsoft (R) Incremental Linker Version 14.28.29333.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:main.exe
/NODEFAULTLIB
/ENTRY:main
main.obj

$ dumpbin /imports main.exe
Microsoft (R) COFF/PE Dumper Version 14.28.29333.0
Copyright (C) Microsoft Corporation.  All rights reserved.


Dump of file main.exe

File Type: EXECUTABLE IMAGE

  Summary

        1000 .rdata
        1000 .text

当然,这意味着您不能使用任何Win32 API。即使您静态链接MSVC提供的C运行时库,它仍然无法工作,因为它将使用系统DLL中的功能。如果您直接调用所需的syscall,则可以解决此问题(只要您知道它们的编号,不同的Windows版本可能会有所不同)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65991737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档