x86-64相关内容

将浮点数相乘和相加

我有一项任务是将一些C++代码转换为ASM,我想知道我的想法是否有意义。首先,我会将整数转换为浮点数。我想得到数组数据到SSE寄存器,但这里有问题,因为我只想要3而不是4个整数,有什么方法可以克服这个问题吗?然后,我将使用CVTDQ2PS将这些整数转换为浮点数,并将这些数字保存在内存中。对于像0.393这样的常量数字,我会做3个浮点数的矢量,然后我会做同样的操作三次,所以我只考虑sepiaRed。 ..
发布时间:2022-09-05 23:01:41 C/C++开发

如何与Windows上的clang链接?

这是一些集合。使用Windows clang,我可以编写clang -c my.s并获得目标文件。我可以使用 链接它 &Q;C:程序文件(X86)Microsoft Visual Studio2019BuildToolsVCToolsMSVC14.29.30133inHostx64x64link.exe";n.o/Entry:Main (库路径为c:/Program Fil ..
发布时间:2022-08-23 11:49:45 其他开发

64位Windows中的程序集系统调用

我使用的是Windows 10,安装了Cygwin。我一直在使用Cygwin编译/汇编c语言程序和使用Cygwin安装的“GCC”和“NASM”汇编程序。据我所知,NASM有一个-f win64模式,所以它可以汇编64位程序。现在,对于Windows上的x64汇编编程,YouTube似乎缺乏教程。YouTube上的大多数汇编编程教程要么适用于x64 Linux,要么适用于x32 Windows,我 ..
发布时间:2022-08-14 13:00:48 其他开发

为什么QEMU在填写PML4的上半部分时返回错误的地址?

我正在编写一个使用UEFI引导的小型x86-64操作系统。我试图通过将内核的可执行文件移到0x800000000000来使内核成为更高的半内核。此地址应该在PML4的中间。基本上,我应该填写PML4的第256项来处理这较高的一半。我试图这样做,但我的代码出现了三重错误。由于我在QEMU上测试内核并使用gdb进行调试,因此我在gdb中使用monitor info mem来查看虚拟地址到物理地址的映射 ..
发布时间:2022-08-02 23:14:07 其他开发

在Intel 64体系结构中,CALLF(远呼叫)是否具有64位地址内存操作数?

在Intel 32位体系结构中,我可以使用MODR/M字节使用32位地址位置进行调用。根据英特尔手册,操作码扩展需要/2(010B),MOD需要00B,101B允许32位位移。 如果我想在64位体系结构中进行远调用,以便有空间容纳64位地址,我知道我可以/3(011B)用于操作码扩展。然而,仍然只提供32位位移。是否可以将目标指定为64位地址? 我主要想知道如何在给定该位置的64位地址的情 ..
发布时间:2022-07-19 16:06:10 其他开发

Syscall在ASM中的引用

https://www.cs.fsu.edu/~langley/CNT5605/2017-Summer/assembly-example/assembly.html 我看到类似下面的例子。但我找不到Syscall的手册。例如,60表示退出,1表示写入。是否有针对所有系统调用的完整手册(包括调用编号和参数含义)? global _start section .text ..
发布时间:2022-07-17 17:22:29 服务器开发

内存屏障的传递性/累积性属性是如何在微体系结构上实现的?

我一直在阅读x86内存模型的工作原理和x86上屏障指令的重要性,并将其与其他体系结构(如ARMv8)进行比较。在x86和ARMv8体系结构中,似乎(没有双关语意思)内存模型尊重传递性/累积性,即,如果CPU1通过CPU0看到存储,并且CPU2通过CPU1看到只有在CPU1看到CPU0存储时才可能发生的存储,那么CPU2也必须看到CPU0的存储。我提到的例子是Paul McKenney的著名论文6. ..

如果不将0作为execve的环境指针传递,为什么这个外壳代码会起作用?

https://www.exploit-db.com/exploits/46907 我的理解是,由于x64调用约定,execve的第三个参数envp应该存储在RDX中。但是这个外壳代码不会将该寄存器置零,它只会将RSI寄存器(存储ARV)置零。因此,如果RDX的当前值未指向有效位置,则会导致段错误,不是吗? 我是否遗漏了什么? 推荐答案 写rdx(带0):注意syscall ..
发布时间:2022-04-18 11:05:29 服务器开发

在不修改内核的情况下拦截系统调用的最小开销方式

我知道拦截系统调用的方法如下。 使用ptrace,但这似乎有很高的开销。据我所知,像strace这样的工具也在内部使用ptrace。 使用内核模块更改系统调用表,但据我所知,这种方法在以后的Linux内核中不再可行。 使用LD_PRELOAD。但是,例如,如果您直接进行系统调用,而没有为该系统调用使用某些包装库函数,则这将不起作用。 所以您可以看到上面提到的所有方法都有缺陷。因此, ..
发布时间:2022-04-18 10:50:30 服务器开发

为什么Visual Studio使用xchg AX、AX

我正在查看我的程序的混乱之处(因为它崩溃了),并注意到许多 xchg ax, ax 我谷歌了一下,发现它本质上是NOP,但为什么Visual Studio要做xchg而不是noop? 该应用程序是由Visual Studio编译的C#.NET3.5 64位应用程序 推荐答案 在x86上NOP指令是XCHG AX, AX 这两条助记符指令汇编成相同的二进制操作码。 ..
发布时间:2022-04-17 21:55:49 其他开发