ld.exe:无法识别的选项“ -z”

时间:2019-03-29 13:51:11

标签: gcc ld msys2

我遵循https://dhavalkapil.com/blogs/Buffer-Overflow-Exploit/并编写了一个小应用程序,并在我的mingw32.exe中用gcc对其进行了编译,但是出现了以下错误。

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ gcc vuln.c -o vuln -fno-stack-protector -m32 -z execstack
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: unrecognized option '-z'
C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe: use the --help option for usage information
collect2.exe: error: ld returned 1 exit status

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ gcc -c vuln.c -o vuln -fno-stack-protector -m32 -z execstack

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ ld -z execstack vuln.o -o vuln
C:\msys32\mingw32\bin\ld.exe: unrecognized option '-z'
C:\msys32\mingw32\bin\ld.exe: use the --help option for usage information

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ ld -v
GNU ld (GNU Binutils) 2.30

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$ C:/msys32/mingw32/bin/../lib/gcc/i686-w64-mingw32/7.3.0/../../../../i686-w64-mingw32/bin/ld.exe -v
GNU ld (GNU Binutils) 2.30

Liu.D.H@DESKTOP-KA8TQF4 MINGW32 ~
$

我可以在execstack中找到man ld选项以及上面匹配的版本。

1 个答案:

答案 0 :(得分:0)

看来Windows -z / gcc仅不支持ld选项(至少我的版本不支持)。我的猜测是,这里的选项实际上仅在Linux上有意义。这使我进入-z execstack选项(而不是同名的Linux tool),该选项告诉ld关闭程序上的数据执行保护(DEP)。这是通过ELF可执行文件中的标志完成的。

另一方面,

Windows DEP policy由操作系统处理。您可以像这样在Windows 10上为单个程序管理它:

  1. 在“开始”菜单中查找“ 调整Windows的外观和性能”。 (您可以键入“性能”,它将出现)。这会为您提供一个新对话框。
  2. 转到第三个标签“数据执行保护”。
  3. 在此处添加/删除例外

或者您可以通过CMD使用bcdedit来全局打开/关闭DEP,但这是一个坏主意。引用该文章:

重要 DEP是一种高效的安全功能,除非您别无选择,否则不应禁用它。