不同的C语言编译器所产生的可执行文件的区别

问题描述 投票:0回答:1

如果有人试图利用一个二进制文件,如果可执行文件是由特定的编译器和链接器产生的,会不会有区别?

我将详细说明这个问题。我试图了解windows开发是如何工作的。我有一个用C写的源代码文件,我可以使用微软的'cl'编译器或GNU的gcc编译器。这两种编译器是否会产生相同的可执行文件,从而以相同的方式进行开发,或者可执行文件不同,随后的开发也不同?如果它们是不同的,那么我应该考虑到哪些不同之处呢?

c security gcc exploit cl
1个回答
0
投票

如果一个人试图利用一个二进制文件,如果可执行文件是由一个特定的编译器和链接器产生的,它会有什么不同吗?

一般来说,是的。 二进制程序的利用通常取决于程序中确切的内存布局和机器指令序列。 当使用不同的编译器来构建程序时--甚至如David C. Rankin所指出的那样,使用不同的选项的同一个编译器时,这种情况会有所不同。

这两者会不会产生相同的可执行文件,所以两者可以用相同的方式进行利用,或者可执行文件会不同,随后的利用也会不同?

它们通常会不同。 如果你运气好的话,某些类型的利用可能会在两个系统上都一样,但这取决于利用的具体内容。 例如,有可能发生这样的情况。

  • 同样的漏洞在新的版本上也能用,而不需要改变。

  • 同样的基本攻击也可以,但由于内存布局不同,地址必须改变

  • 该漏洞仍有可能被利用,但需要完全不同的技术。

  • 巧合或本编译器实施的有意对策(堆栈防护、地址随机化等),已经无法实现利用。

如果它们是不同的,那么我应该考虑到哪些差异?

太宽泛了,无法回答。 一般来说,你可能要完全从头开始分析第二个编译器所构建的程序的行为,以确定它是否还可以被利用,如果可以,如何实现。

© www.soinside.com 2019 - 2024. All rights reserved.