我想知道如何知道我的处理器使用的是哪个指令集;我正在运行 Linux。
我还想了解处理器如何处理许多指令集。
当我输入时cat /proc/cpuinfo,我得到:
model name : AMD FX(tm)-6350 Six Core Processor
Run Code Online (Sandbox Code Playgroud)
我还看到了许多标志:fpu, vme, mmxext, ...
我试图找到从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)