在MSVC(Windows)中编译二进制文件时,它将输出一个名为“ .pdata”的部分,并将其他一些信息推入.RDATA中以进行展开。
GCC具有编译器选项:
interface ISmth { x: number; }
type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N;
declare function f<V = any, A extends ISmth = ISmth>(a: IfAny<A, never, A>): V;
declare function g<V = any, A extends ISmth = any>(a: IfAny<A, never, A>): V;
declare var x: ISmth, y: any;
f(x); // Fine
f(y); // Fine: Argument of type 'any' is not assignable to parameter of type 'never'.
f<string>(x); // Fine
f<string>(y); // BAD: Should be an error, but compiles
g(x); // Fine
g(y); // Fine: Argument of type 'any' is not assignable to parameter of type 'never'.
g<string>(x); // BAD: Should NOT be an error
g<string>(y); // Fine: Argument of type 'any' is not assignable to parameter of type 'never'.
(在我的测试中)完全消除了输出二进制文件中的所有这些内容,但是MSVC似乎没有类似的东西...
我当前的编译器标志是:
-fno-asynchronous-unwind-tables -fno-unwind-tables
我关闭了“启用C ++异常”,在链接器中,我使用的是“ / SAFESEH:NO”。
此外,我正在定义:
/Zc:threadSafeInit-
/GR-
/TP
/GS-
...
在包含STL标头之前(摆脱所有try / catch用法)。
然后,在IDA中打开输出EXE ...
如何摆脱本节/取消信息?
答案 0 :(得分:1)
msvc编译器中没有这样的选项。 在Visual Studio中使用llvm。并使用以下选项。确实有效。
/ clang:-fno-unwind-tables