x86-64相关内容

如何在没有 Glibc 的情况下在 C 中使用内联汇编获取参数值?

如何在没有 Glibc 的情况下在 C 中使用内联汇编获取参数值? 我需要此代码用于 Linux 架构 x86_64 和 i386.如果您了解 MAC OS X 或 Windows ,请提交并指导. void exit(int code){//这个函数不重要!//...}无效_开始(){//如何使用内联汇编获取参数值//在没有Glibc的C中?//参数//参数退出(0);} 新更新 ..
发布时间:2021-12-18 08:51:03 其他开发

为什么 GCC 在堆栈上分配的空间超出了所需的空间,超出了对齐所需的空间?

我正在阅读一本教科书,其中展示了基于 C 代码的汇编代码: C 代码: void echo(){字符缓冲区[8];其他功能(缓冲);} 汇编代码: 回声:subq $24, %rsp//在栈上分配24个字节,但为什么分配24个而不是8个字节?movq %rsp, %rdi//将buf计算为%rsp调用其他函数 我不明白为什么堆栈指针 %rsp 减少了 24 个字节.我只将 8 个字节 ..
发布时间:2021-12-18 08:47:33 其他开发

为什么 x86(-64) 上的有符号和无符号乘法指令不同?

我认为 2 的补码的全部意义在于,对于有符号数和无符号数,操作可以以相同的方式实现.维基百科甚至特别将乘法列为受益的操作之一.那么为什么 x86 对 mul 和 imul 分别有单独的指令?这对于 x86-64 仍然适用吗? 解决方案 加法和减法是一样的,乘法的低半部分也是一样.然而,完整的乘法不是.简单例子: 在 32 位二进制补码中,-1 与无符号量 2**32 - 1 具有相同 ..
发布时间:2021-12-18 08:47:25 其他开发

从 x86-64 打印浮点数似乎需要保存 %rbp

当我在 Ubuntu 上使用 gcc 4.6.1 编写一个与 C 库链接的简单汇编语言程序,并尝试打印一个整数时,它工作正常: .global main.文本主要的:mov $format, %rdimov $5, %rsi移动 $0, %rax调用 printf退格式:.asciz "%10d\n" 这会按预期打印 5. 但是现在如果我做一个小的改变,并尝试打印一个浮点值: .g ..
发布时间:2021-12-18 08:46:17 其他开发

为什么 x86-64 中的全局变量是相对于指令指针访问的?

我尝试使用 gcc -S -fasm foo.c 将 c 代码编译为汇编代码.c代码在main函数中声明全局变量和变量如下图: int y=6;int main(){整数 x=4;x=x+y;返回0;} 现在我查看了从这个 C 代码生成的汇编代码,我看到全局变量 y 是使用 rip 指令指针的值存储的. 我认为只有 const 全局变量存储在文本段中,但是,看这个示例,似乎常规全局变量也 ..
发布时间:2021-12-18 08:46:09 其他开发

x86-64 上的红色区域究竟在哪里?

来自维基百科: 在计算中,红色区域是函数堆栈帧中超出返回地址的固定大小区域,该区域未由该函数保留.被调用函数可以使用红色区域来存储局部变量,而无需修改堆栈指针的额外开销.这个内存区域不会被中断/异常/信号处理程序修改.System V 使用的 x86-64 ABI 要求有一个 128 字节的红色区域,该区域直接在返回地址之后开始并包含函数的参数.OpenRISC 工具链假定一个 128 字节 ..
发布时间:2021-12-18 08:43:01 其他开发

如何使用 printf 打印单精度浮点数

我正在尝试在 x86_64 程序集中打印一个浮点数,但它只是将值打印为零. 关于这个已经有几个问题了.一个似乎通过确保您在 %al 中设置您使用的向量寄存器的数量来解决.另一个显示您需要有 16 个字节的堆栈对齐.但是,我正在做这两件事,但仍然没有得到正确的输出. 这是我的程序: # 打印一个浮点值.section .rodata.fmt: .string "num: %f\n".n ..
发布时间:2021-12-18 08:41:36 其他开发

为什么没有“sub rsp"?此函数序言中的指令以及为什么函数参数存储在负 rbp 偏移量处?

我看了一些内存分割文档是这么理解的:当一个函数被调用时,有几条指令(称为函数序言)将帧指针保存在堆栈上,将堆栈指针的值复制到基指针中并为局部变量节省一些内存. 这是我尝试使用 GDB 调试的一个简单代码: void test_function(int a, int b, int c, int d) {整数标志;字符缓冲区[10];标志 = 31337;缓冲区[0] = 'A';}int m ..
发布时间:2021-12-18 08:41:07 其他开发

x86_64 上的原子双浮点或 SSE/AVX 矢量加载/存储

这里(以及一些 SO 问题)我看到 C++ 没有不支持无锁 std::atomic 之类的东西,并且还不能支持原子 AVX/SSE 向量之类的东西,因为它依赖于 CPU(尽管现在我知道的 CPU,ARM,AArch64 和 x86_64 有向量). 但是在 x86_64 中是否有对 double 或向量的原子操作的汇编级支持?如果是,支持哪些操作(例如加载、存储、加、减、乘)?MSVC++2 ..
发布时间:2021-12-18 08:40:45 C/C++开发

x86_64 - 汇编 - 循环条件和乱序

我不是要求基准. (如果是这样,我会自己做的.) 我的问题: 为了方便起见,我倾向于避免使用间接/索引寻址模式. 作为替代,我经常使用立即寻址、绝对寻址或寄存器寻址. 代码: ;%esi 有数组地址.假设我们迭代一个双字(4 字节)数组.;%ecx 是数组元素计数(0x98767) myloop:... ; 用 %esi 做任何事加 4 美元,%esi十二月%ecx ..
发布时间:2021-12-08 23:33:42 其他开发

推动 64 位英特尔 osx

我想将 64 位地址压入堆栈,如下所示, __asm("pushq $0x1122334455667788"); 但我得到编译错误,我只能按以下方式推送, __asm("pushq $0x11223344"); 有人可以帮助我理解我的错误吗? 我是组装新手,所以如果我的问题听起来很愚蠢,请原谅. 解决方案 x86-64 有一些有趣的怪癖,即使您熟悉 32 位 x86 也不明显 ..
发布时间:2021-12-06 21:07:17 其他开发

无法将 .data 中的变量移动到 Mac x86 程序集的注册

我用 AT&T 语法编写了一小段程序集,目前在 .data 部分声明了三个变量.但是,当我尝试将这些变量中的任何一个移动到寄存器(例如 %eax)时,会引发来自 gcc 的错误.代码和错误信息如下: .datax:.int 14y:.int 4str: .string "一些字符串\n";.globl _main_主要的:pushq %rbpmovq %rsp, %rbpsubq 16 美元,% ..
发布时间:2021-12-06 21:01:23 其他开发

MacOS 程序集的 64 位系统调用文档

我找不到在 MacOS 上编写 64 位程序集的好文档. 64 位 SysV ABI 在 A 部分中说明了以下内容.2.1 和 这篇SO帖子引用了它: 系统调用是通过 syscall 指令完成的.内核破坏注册 %rcx 和 %r11. 从系统调用返回,寄存器 %rax 包含系统调用.-4095 和 -1 之间的值表示错误,它是 -errno. 这两句话在 Linux 上没问 ..
发布时间:2021-12-06 20:56:16 其他开发

在 OS X 上构建 Multiarch OpenSSL

我需要在 OS X 上为 32 位和 64 位架构构建 OpenSSL.我需要为 ./Configure 提供哪些选项,以便我将它为两种架构构建到同一个 .a 文件中? 解决方案 ./Configure 以便我将它为两种架构构建到同一个 .a 文件中? 您必须小心使用 OpenSSL 和多架构库,因为该库不是多架构安全的.那是因为每个配置都有自己的文件,每个平台的BIGNUM都不 ..
发布时间:2021-12-06 20:30:28 其他开发

使用 HT 在一个 Core 上执行的线程之间的数据交换将使用什么?

超线程 技术是同时多线程的一种形式英特尔推出的技术. 这些资源包括执行引擎、缓存和系统总线界面;资源共享允许两个逻辑处理器彼此更有效地合作,并允许停滞的逻辑处理器从另一个处理器借用资源. 在具有超线程的 Intel CPU 中,一个 CPU-Core(带有多个 ALU)可以在同一时钟下执行来自 2 个线程的指令.并且两个线程共享:存储缓冲区、缓存 L1/L2 和系统总线. 但是如 ..
发布时间:2021-12-06 11:36:55 其他开发

x86_64 va_list 结构的格式是什么?

任何人都可以参考 x86_64 ABI(Linux 上使用的 ABI)中 va_list 的表示?我正在尝试调试一些堆栈或参数似乎已损坏的代码,这真的有助于理解我应该看到的内容... 解决方案 x86-64 System V ABi 文档可能会有所帮助.这是一个参考,虽然很轻. 变量参数列表参考从第 54 页开始,然后继续,第 56-57 页文档va_list: va_list ..
发布时间:2021-12-03 13:41:24 服务器开发