我能够从DOS header 解析ASLR,DEP,SEH等,但不确定如何判断文件是否使用/ GS堆栈金丝雀进行了编译。

我正在编写程序,因此如果没有开放源代码,将我指向PEStudio之类的程序将无济于事。

这是dos header 的一部分吗?还是我必须在.data部分中扫描__security_cookie?

最佳答案

  • 转到IMAGE_NT_HEADERS
  • 然后IMAGE_OPTIONAL_HEADER(IMAGE_NT_HEADERS.OptionalHeader)
  • 然后是IMAGE_DATA_DIRECTORY(IMAGE_NT_HEADERS.OptionalHeader.DataDirectory)
  • 第10个条目VirtualAddress成员是“负载配置目录”的RVA。
  • IMAGE_NT_HEADERS.OptionalHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG] .VirtualAddress

  • 负载配置目录是IMAGE_LOAD_CONFIG_DIRECTORY结构。

    检查SecurityCookie成员:如果它不为0,则此PE使用/ GS。

    关于c++ - 如何判断是否为PE Win32启用了/GS编译器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26285848/

    10-10 12:38