如果试图利用二进制文件,如果可执行文件是由特定的编译器和链接器生成的,会有什么不同吗?
我将详细说明这个问题。我正在努力了解利用windows的工作原理。我有一个用C编写的源代码文件。我可以使用微软的"cl"编译器或GNU gcc编译器。这两者是否会产生相同的可执行文件,从而可以以相同的方式利用它们,或者可执行文件会不同,随后利用会不同?如果它们不同,我应该考虑哪些差异?
如果试图利用二进制文件,如果可执行文件是由特定的编译器和链接器生成的,会有什么不同吗?
一般来说,是的。二进制程序的利用通常取决于程序中确切的内存布局和机器指令序列。当使用不同的编译器来构建程序时,情况会有所不同,甚至正如David C.Rankin所指出的,同一个编译器有不同的选项。
这两者是否会产生相同的可执行文件,以便以相同的方式利用它们,或者可执行文件会不同,随后利用率会不同?
它们通常会有所不同。如果幸运的话,某些类型的漏洞攻击可能在两者上都起作用,但这取决于漏洞攻击的具体作用。例如,可能会发生以下情况:
-
同样的漏洞适用于不更改的新构建
-
相同的基本攻击有效,但由于的内存布局不同,地址必须更改
-
该漏洞仍然是可能的,但需要完全不同的技术
-
该漏洞不再可能被利用,可能是由于巧合,也可能是该编译器有意实施的对策(堆栈保护、地址随机化等(。
如果它们不同,我应该考虑哪些差异?
太宽泛,无法回答。通常,在分析第二个编译器构建的程序的行为时,您可能必须完全从头开始,以确定它是否仍然可以利用,如果可以,如何实现。