C++ 有没有一种方法可以禁用";。pdata";/&引用;“例外情况”;及;展开“U信息”;在MSVC输出中?

C++ 有没有一种方法可以禁用";。pdata";/&引用;“例外情况”;及;展开“U信息”;在MSVC输出中?,c++,exception,visual-c++,C++,Exception,Visual C++,在MSVC(windows)中编译二进制文件时,它会输出一个名为“.pdata”的部分,并将一些其他信息放入.RDATA中以便展开 GCC具有编译器选项: -fno-asynchronous-unwind-tables -fno-unwind-tables 这(在我的测试中)完全消除了输出二进制文件中的所有这些内容,但是MSVC似乎没有任何类似的东西 我当前的编译器标志是: /Zc:threadSafeInit- /GR- /TP /GS- ... 我已经“启用C++异常”,在链接器中,我

在MSVC(windows)中编译二进制文件时,它会输出一个名为“.pdata”的部分,并将一些其他信息放入.RDATA中以便展开

GCC具有编译器选项:

-fno-asynchronous-unwind-tables -fno-unwind-tables
这(在我的测试中)完全消除了输出二进制文件中的所有这些内容,但是MSVC似乎没有任何类似的东西

我当前的编译器标志是:

/Zc:threadSafeInit-
/GR-
/TP
/GS-

...

我已经“启用C++异常”,在链接器中,我使用“/SAFSEEH:不”。 此外,我定义:

#define _HAS_EXCEPTIONS 0
在包含STL头之前(以消除所有try/catch用法)

然后,在IDA中打开输出EXE时


如何删除此节/展开信息?

msvc编译器中没有此类选项。 在VisualStudio中使用llvm。并使用下面的选项。这确实有效


/叮当声:-fn没有展开表

请用实际输出替换图像。x64 Windows ABI要求展开表,/SAFESEH:NO被忽略。@HansPassant没有将抛出的函数(或分支函数)。其他编译器允许删除展开/异常信息,并且不抛出或指定关于它的警告,因此这有点矛盾。据我所知,这似乎是msvc特有的,不可改变的。在某些编译器设置中,您可以修复它,但在最新版本(VS2019)中,它似乎总是强制启用。@ChrisF这是实际的output@f4rw3llvv对不起,我的意思是让你将输出作为文本而不是图像发布。似乎这是我目前唯一的选择。但这对clang cl有效吗?叮当的逾越节对我来说根本不起作用。我知道clang和clang cl是不同的。@Trass3r我在尝试使用clang-cl时得到
错误:未知参数:'-fno unwind tables'