问题描述
所以我无法找到有关我目前遇到的问题的任何信息。我希望这里有人知道如何解决它。
我正在使用 Clang 11.0.0 编译一个非常简单的 C 程序。我希望它生成一个 .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 格式的展开信息。
如何告诉 Clang/GCC 或 LLD 也对 32 位编译程序使用 .pdata
样式展开信息?
有什么办法可以强制编译器或链接器在 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 位部分):
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)