gpt4 book ai didi

linux - 没有 %gs 寄存器的 x86 子集 : binary patching code that uses %gs instead of trapping to emulation?

转载 作者:IT王子 更新时间:2023-10-29 01:06:24 32 4
gpt4 key购买 nike

由于太复杂的原因无法在这里解释,我需要在 x86 的子集平台上运行 x86 GCC 编译的 Linux 程序。该平台没有 %gs 寄存器,这意味着它必须被模拟,因为 GCC 依赖于 %gs 寄存器的存在。

目前我有一个包装器,当程序试图访问 %gs 寄存器时捕获异常,并模拟它。但这是狗慢。有没有一种方法可以使用等效指令提前修补 ELF 中的操作码,从而避免陷阱和仿真?

最佳答案

您是否尝试过使用 -mno-tls-direct-seg-refs 选项编译您的代码?从我的 GCC 手册页 (i686-apple-darwin10-gcc-4.2.1):

   -mtls-direct-seg-refs
-mno-tls-direct-seg-refs
Controls whether TLS variables may be accessed with offsets from
the TLS segment register (%gs for 32-bit, %fs for 64-bit), or
whether the thread base pointer must be added. Whether or not this
is legal depends on the operating system, and whether it maps the
segment to cover the entire TLS area.

For systems that use GNU libc, the default is on.

关于linux - 没有 %gs 寄存器的 x86 子集 : binary patching code that uses %gs instead of trapping to emulation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6907248/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com