小编DJ_*_*Joe的帖子

确定我的处理器在 Linux 下的指令集

我想知道如何知道我的处理器使用的是哪个指令集;我正在运行 Linux。

我还想了解处理器如何处理许多指令集。

当我输入时cat /proc/cpuinfo,我得到:

model name : AMD FX(tm)-6350 Six Core Processor
Run Code Online (Sandbox Code Playgroud)

我还看到了许多标志:fpu, vme, mmxext, ...

linux processor instruction-set

8
推荐指数
1
解决办法
9070
查看次数

编译器可以生成无用的汇编代码吗?

我试图找到从ac程序生成的汇编代码的含义.这是C中的程序:

int* a = &argc;
int b = 8;
a = &b;
Run Code Online (Sandbox Code Playgroud)

以下是使用说明生成的汇编代码.有一部分我不明白:

主要序言:

leal    4(%esp), %ecx
andl    $-16, %esp
pushl   -4(%ecx)
pushl   %ebp
movl    %esp, %ebp
pushl   %ecx
subl    $36, %esp
Run Code Online (Sandbox Code Playgroud)

在%eax中加载argc的地址:

movl    %ecx, %eax
Run Code Online (Sandbox Code Playgroud)

我得不到的部分:

movl    4(%eax), %edx
movl    %edx, -28(%ebp)
Run Code Online (Sandbox Code Playgroud)

Stack-Smashing Protector代码(设置):

movl    %gs:20, %ecx
movl    %ecx, -12(%ebp)
xorl    %ecx, %ecx
Run Code Online (Sandbox Code Playgroud)

在a和b中加载值(参见main.c):

movl    %eax, -16(%ebp)
movl    $8, -20(%ebp)
Run Code Online (Sandbox Code Playgroud)

修改a(a =&b)的值:

leal    -20(%ebp), %eax
movl    %eax, -16(%ebp)
Run Code Online (Sandbox Code Playgroud)

Stack-Smashing Protector代码(验证堆栈是否正常):

movl    $0, %eax
movl    -12(%ebp), %edx
xorl    %gs:20, %edx …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly gcc

-1
推荐指数
1
解决办法
165
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

instruction-set ×1

linux ×1

processor ×1

x86 ×1