问题标签 [linux-x32-abi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
597 浏览

c - 应如何为 x86_64 定义 [u]int_fastN_t 类型,无论是否使用 x32 ABI?

x32 ABI为 x86_64 体系结构生成的代码指定了32 位指针等。它结合了 x86_64 架构(包括 64 位 CPU 寄存器)的优点和 32 位指针的减少开销。

<stdint.h>头定义了 typedefs int_fast8_tint_fast16_tint_fast32_tint_fast64_t(以及相应的无符号类型uint_fast8_t等),其中每一个是:

在至少具有指定宽度的所有整数类型中,通常使用最快的整数类型

带脚注:

不保证指定的类型在所有用途中都是最快的;如果实现没有明确的理由选择一种类型而不是另一种,它将简单地选择一些满足符号和宽度要求的整数类型。

(引自N1570 C11 草案。)

问题是,无论有没有 x32 ABI,应该如何为 x86_64 架构定义类型[u]int_fast16_t和类型?[u]int_fast32_t是否有指定这些类型的 x32 文档?它们是否应该与 32 位 x86 定义(均为 32 位)兼容,或者,由于 x32 可以访问 64 位 CPU 寄存器,它们是否应该在有或没有 x32 ABI 的情况下具有相同的大小?(请注意,无论 x32 ABI 是否在使用中,x86_64 都有 64 位寄存器。)

这是一个测试程序(取决于 gcc 特定的__x86_64__宏):

当我用 编译它时gcc -m64,输出是:

当我用 编译它时gcc -mx32,输出是:

(除了第一行之外,它与输出匹配gcc -m32,生成 32 位 x86 代码)。

这是 glibc 中的错误(它定义了<stdint.h>标头),还是遵循某些 x32 ABI 要求?在x32 ABI 文档x86_64 ABI 文档中都没有对[u]int_fastN_t类型的引用,但可能有其他东西指定它。

有人可能会争辩说,fast16 和 fast32 类型应该是带有或带有 x32 的 64 位,因为 64 位寄存器可用;这会比当前的行为更有意义吗?

(我已经对原始问题进行了实质性编辑,该问题仅询问了 x32 ABI。现在问题询问了带有或不带有 x32 的 x86_64。)

0 投票
1 回答
91 浏览

c++ - g++ 目标文件参数位置很重要并给出不同的结果无法正常编译

有一个 main.cpp 的简单测试文件(如果不重要),我编译并创建目标文件如下:

对象文件被创建。之后我删除创建并使用以下命令测试可执行文件:

但是当我这样做时:

它输出:

当我在第一个命令中省略 -c 一步进行编译时,也会发生同样的情况。我被困了几天!在那并且无法正常编译。

ld 和 g++ 的版本是:

0 投票
2 回答
417 浏览

bash - 如何从标准输入逐行反汇编?

我的程序输出编码指令,如下所示:

上面的每一行都是独立的指令集,需要作为单独的程序进行反汇编。每行包含 7 个字节的指令。我可以直接将它们输出为二进制,***在这种情况下,每个7字节的块都需要单独反汇编。

在运行我的程序的 bash 脚本中,我想过滤掉包含静态跳转的行。

那么,如何将每一行与 stdin 分开?(我想做类似的事情./my_C_program | the_disassembler | grep loopne
我尝试了 objdump,但它拒绝/dev/stdin用作输入文件。

0 投票
0 回答
236 浏览

assembly - X32 和 __gnu_cxx::__exchange_and_add_single?

我试图了解在 X32 平台(带有 ILP32 的 x86_64)上进行测试的库中的崩溃。当我回溯它时,我看到:

和:

当我查看反汇编时,我看到以下内容。$pc0x454b12: mov %eax,%ebx

看起来对outsl我来说很不寻常__gnu_cxx::__exchange_and_add_single

谁能解释__gnu_cxx::__exchange_and_add_single正在生成的代码发生了什么?


0 投票
1 回答
177 浏览

linux-x32-abi - fasm 中的 x32 可执行文件

"format ELF executable 3" 使 x86 可执行文件
"format ELF64 executable 3" 使 x64 可执行文件

但是如何使x32(带有 32 位指针的 x64)可执行?

ps 这些行中“可执行”之后的“3”是什么意思?

0 投票
0 回答
110 浏览

c - 用户空间中的信号处理如何获取 siginfo 和 ucontext?

我阅读了有关信号句柄的内核代码,据我所知,x32 从堆栈而不是寄存器中获取参数。但我无法理解下面的代码。

我希望“&frame->info”和“&frame->uc”应该放在“frame”,因为“frame”是堆栈,信号句柄从堆栈中获取参数。

但是上面的代码显示“&frame->info”和“&frame->uc”位于regs,那么信号句柄如何获取这两个参数