标签: assembly

如何在 Linux 上检查二进制文件是否需要 SSE4 或 AVX

在 Linux 上,/proc/cpuinfo允许以一种简单的方式检查机器具有的所有 CPU 标志。
通常,如果程序需要机器指令集的超集,确定它的最简单方法是运行它并查看它是否发出SIGILL信号。

但就我而言,我所有的处理器都至少支持 SSE4.1 和 AVX。
那么,有没有一种简单的方法来检查二进制文件内部是否有特殊指令?

linux assembly x86

23
推荐指数
4
解决办法
2万
查看次数

x86 和 x64 处理器上 CPU 指令的延迟

我正在寻找一些表格或类似的东西,可以帮助我计算汇编代码的效率。

据我所知,位移需要 1 个 CPU 时钟,但我真的在看需要多少加法(减法应该相同),乘法以及如果我知道正在除法的值,如何大概计算除法时间。

我真的需要有关整数值的信息,但也欢迎浮动执行时间。

cpu 64-bit latency assembly x86

18
推荐指数
2
解决办法
4万
查看次数

当我在 Linux 系统上运行“cli; hlt”时实际发生了什么?

所以我最近发现有一个HLT用于停止 CPU的操作码。酷,让我们看看会发生什么!

user@box:~$ cat > test.c
int main(void)
{
    __asm__("HLT");
    return 0;
}
user@box:~$ gcc -o test test.c
user@box:~$ ./test
Segmentation fault (core dumped)
user@box:~$
Run Code Online (Sandbox Code Playgroud)

呸!多么无聊。

原来HLT是一个特权指令,所以让我们尝试别的东西。

user@box:~$ mkdir test; cd test
user@box:~/test$ cat > test.c
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>

int init_module(void)
{
    __asm__("hlt");
    return 0;
}

void cleanup_module(void)
{
}
user@box:~/test$ echo obj-m += test.o > Makefile
user@box:~/test$ make -C /lib/modules/$(uname -r)/build modules M=$(pwd)
[...]
user@box:~/test$ sudo insmod test.ko
user@box:~/test$
Run Code Online (Sandbox Code Playgroud)

没发生什么事!无聊的!

事实证明,HLT …

linux assembly

18
推荐指数
1
解决办法
2614
查看次数

为什么我们不能理解编译后的二进制文件的内容?

据我所知,每个程序都由一组处理器指令组成,其中包含一些特定的数据变量(float、int、char...),用于处理处理器寄存器

因此,我(很久以前)想到的第一件事是,如果您知道%¨#$¨#(只是一个随机示例)的 ASCII 值可以解释为x86的堆栈指针寄存器(只是示例)的地址处理器。如果这是真的,每次在读取二进制文件的内容时发现这个“不可读”的值,您就可以解释堆栈指针寄存器正在用于管理某些数据变量。

不幸的是,这不会发生。下面是一个ping.exe从 Windows 中打开的程序内容示例notepad.exe

在 MS 记事本中查看的 Ping.exe

它是一个二进制文件,其数据对于我们人类来说是不可理解的(对于机器来说是可以理解的。)即使他们知道汇编代码(机器语言的最低级别),对任何人来说也没有任何意义。

所以,如果我正确理解了一切,有人可以解释一下吗

  1. 为什么二进制代码不能返回到汇编代码,因为它们在深处,同样的事情?
  2. 如果可以理解汇编代码,为什么由这段代码生成的编译后的二进制文件不再“可读”了?

windows assembly binary-files

11
推荐指数
2
解决办法
6604
查看次数

缺少 cmpxchg16b 指令的旧 x64 处理器有多普遍?

旧版本的 x64 处理器不支持用于执行原子 128 位内存交换的 cmpxchg16b 指令,但似乎新版本的处理器已经支持了好几年了。我遇到 64 位机器的旧处理器缺少此指令的可能性有多大?

assembly

10
推荐指数
2
解决办法
1万
查看次数

如何查看文件的所有位?

我正在寻找一种方法来查看文件的所有位。我想查看文件中的所有 01,因为我想知道使用闭源应用程序编辑文件时到底发生了什么变化。

text-editing hex-editor assembly

7
推荐指数
1
解决办法
5029
查看次数

Windows --&gt; Assembly 文件夹典型大小:又名 GAC

我是 Win 7 RC1 (x64) 机器上的 .net 开发人员,我碰巧注意到我的 GAC(全局程序集缓存)文件夹的大小为 1.2 GB(1700 个文件)。

这让我想知道“正常”大小是什么以及拥有这么大的尺寸可能会产生什么超出显而易见的含义。

cache assembly

5
推荐指数
1
解决办法
800
查看次数

关于软盘的旧技术

我有一个带有未知 FS-(文件系统)的软盘。我想从中复制一份,但我不能,因为 Windows 和 Linux 似乎都无法从中读取。

我尝试了许多最流行的应用程序来制作图像文件(例如 isomeric、winimage 等),但它们都无法制作图像。

在 Linux 上,我尝试使用dd命令复制它,但似乎甚至dd无法复制。我在从磁盘读取时遇到很多错误,我查了一下,发现dd由于扇区损坏而无法从中读取 - 但是当我在 HITACHI 系统上测试该软盘时,它工作正常,但我没有得到任何错误错误。

问题是:我怎样才能从这种类型的软盘上复制一份?我听说我可以使用 BIOS 中断来处理这种事情?

linux iso-image operating-systems floppy assembly

5
推荐指数
1
解决办法
851
查看次数

Vim 汇编格式

Vim 没有正确缩进汇编代码,无论我是否希望它自动缩进,或者如果我尝试gg=G它只会显示## 行缩进,即使它没有改变任何内容并且我的所有文本仍然左对齐。

vim indentation assembly

5
推荐指数
1
解决办法
3912
查看次数

有什么方法可以查看我的 CPU 在“汇编级别”上做什么?

我一直在研究汇编语言的工作原理,因为我想了解我的计算机在 CPU 寄存器/硬件级别上实际发生的复杂和奇特的事情是如何发生的。有什么办法可以看到正常使用电脑时发生了什么?

我想学习,当我说,浏览互联网或玩游戏等时,什么样的东西进出各种寄存器。虽然即使我能看这个,我也不知道如何关联它我可以看到在更高级别发生的特定计算。也就是说,我不知道我怎么知道此时进入这个寄存器的这个十六进制代码是否与 Firefox 处理 SSL 加密等有关。

cpu logging assembly

3
推荐指数
1
解决办法
1810
查看次数