【发布时间】:2020-05-06 16:47:28
【问题描述】:
如果尝试利用二进制文件,如果可执行文件是由特定的编译器和链接器生成的,会有什么不同吗?
我会详细说明这个问题。我试图了解 Windows 漏洞利用的工作原理。我有一个用 C 编写的源代码文件。我可以使用 Microsoft 的“cl”编译器或 GNU gcc 编译器。这两者会产生相同的可执行文件,因此两者都可以以相同的方式被利用,或者可执行文件会不同,因此利用会不同?如果它们不同,我应该考虑哪些差异?
【问题讨论】:
-
这只是假设,对吧?对?好吧,如果您说的是应用程序级漏洞利用,那么是的,这通常需要特定于用于构建应用程序的编译器,但是,应用程序供应商通常只为每个平台发布一个版本。
-
可执行文件在编译器之间、同一编译器的版本之间、有时甚至在连续构建之间是不同的。 一些漏洞可能与编译器无关,例如,如果您在源代码中看到
system(argv[2]);,但这种情况很少见。 -
只需将
/Ox添加到您的cl构建或-O3到您的gcc 构建将导致不同的可执行文件。影响最终可执行文件的所有编译器都有许多选项。 -
好的,谢谢大家,你们的回答很有帮助