そのため、現在抱えている問題に関する情報を見つけることができません。ここの誰かがそれを解決する方法を知っていることを願っています。
非常に単純な C プログラムをコンパイルするために Clang 11.0.0 を使用しています。.pdata
Windows 標準に従ってアンワインド情報を含むセクションを生成する必要があります (参照: https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-runtime_function )。
これを 64 ビット用にコンパイルし、-funwind-tables
フラグを使用する場合。LLD は、期待どおりの形式で .pdata セクションを適切に生成します。ただし、32 ビット (i686-w64-windows-gnu) 用にコンパイルすると.eh_fram
、非 Windows 形式のアンワインド情報を含むセクションが常に生成されます。
.pdata
Clang/GCC または LLD に、32 ビットでコンパイルされたプログラムのスタイルの巻き戻し情報も使用するように指示するにはどうすればよいですか?
コンパイラまたはリンカーに 32 ビット用の SEH を強制的に使用させる方法はありますか?
これは私が現在テストしているものです:
clang -funwind-tables -fuse-ld=lld main.c
C コード:
__attribute__((noinline))
void call_3() {
*(int *) (0x43000) = 0x3334;
}
__attribute__((noinline))
void call_2() {
call_3();
}
__attribute__((noinline))
void call_1() {
call_2();
}
int main() {
call_1();
return 0;
}
32 ビット コンパイル済みセクション:
64 ビットでコンパイルされたセクション (これ.pdata
は 32 ビットのセクションでも必要です):