草庐IT

ASSEMBLY

全部标签

c++ - 如何在 Linux 中反汇编二进制可执行文件以获取汇编代码?

有人告诉我使用反汇编程序。gcc有内置的东西吗?最简单的方法是什么? 最佳答案 我不认为gcc有它的标志,因为它主要是一个编译器,但另一个GNU开发工具有。objdump采用-d/--disassemble标志:$objdump-d/path/to/binary反汇编如下:080483b4:80483b4:8d4c2404lea0x4(%esp),%ecx80483b8:83e4f0and$0xfffffff0,%esp80483bb:ff71fcpushl-0x4(%ecx)80483be:55push%ebp80483bf:89

c++ - 如何在 Linux 中反汇编二进制可执行文件以获取汇编代码?

有人告诉我使用反汇编程序。gcc有内置的东西吗?最简单的方法是什么? 最佳答案 我不认为gcc有它的标志,因为它主要是一个编译器,但另一个GNU开发工具有。objdump采用-d/--disassemble标志:$objdump-d/path/to/binary反汇编如下:080483b4:80483b4:8d4c2404lea0x4(%esp),%ecx80483b8:83e4f0and$0xfffffff0,%esp80483bb:ff71fcpushl-0x4(%ecx)80483be:55push%ebp80483bf:89

linux - 什么是英特尔微码?

据我所知,它用于在不修改BIOS的情况下修复CPU中的错误。根据我对汇编的基本知识,我知道汇编指令在CPU内部被拆分为微码并相应地执行。但是英特尔以某种方式允许在系统启动并运行时进行一些更新。谁有更多关于他们的信息?有没有关于微码可以做什么以及如何使用它们的文档?编辑:我读过维基百科的文章:不知道如何自己写一些,以及它有什么用途。 最佳答案 在过去,微码在CPU中被大量使用:每条指令都被分割成微码。这在适度的CPU中启用了相对复杂的指令集(考虑一下Motorola68000,具有多种操作数模式和八个32位寄存器,适合40000个晶体

linux - 什么是英特尔微码?

据我所知,它用于在不修改BIOS的情况下修复CPU中的错误。根据我对汇编的基本知识,我知道汇编指令在CPU内部被拆分为微码并相应地执行。但是英特尔以某种方式允许在系统启动并运行时进行一些更新。谁有更多关于他们的信息?有没有关于微码可以做什么以及如何使用它们的文档?编辑:我读过维基百科的文章:不知道如何自己写一些,以及它有什么用途。 最佳答案 在过去,微码在CPU中被大量使用:每条指令都被分割成微码。这在适度的CPU中启用了相对复杂的指令集(考虑一下Motorola68000,具有多种操作数模式和八个32位寄存器,适合40000个晶体

linux - 如何反汇编原始 16 位 x86 机器代码?

我想反汇编我拥有的可引导x86磁盘的MBR(前512个字节)。我已将MBR复制到一个文件中使用ddif=/dev/my-deviceof=mbrbs=512count=1对可以反汇编文件mbr的Linux实用程序有什么建议吗? 最佳答案 您可以使用objdump。根据thisarticle语法是:objdump-D-bbinary-mi386-Maddr16,data16mbr 关于linux-如何反汇编原始16位x86机器代码?,我们在StackOverflow上找到一个类似的问题:

linux - 如何反汇编原始 16 位 x86 机器代码?

我想反汇编我拥有的可引导x86磁盘的MBR(前512个字节)。我已将MBR复制到一个文件中使用ddif=/dev/my-deviceof=mbrbs=512count=1对可以反汇编文件mbr的Linux实用程序有什么建议吗? 最佳答案 您可以使用objdump。根据thisarticle语法是:objdump-D-bbinary-mi386-Maddr16,data16mbr 关于linux-如何反汇编原始16位x86机器代码?,我们在StackOverflow上找到一个类似的问题:

c++ - 使用 Intel 编译器 : looking at the assembly 的 Windows 和 Linux 之间的性能差异

我正在Windows和Linux(x86-64)上运行一个程序。它使用相同的编译器(IntelParallelStudioXE2017)和相同的选项编译,Windows版本比Linux版本快3倍。罪魁祸首是调用std::erf这两种情况都在英特尔数学库中得到解决(默认情况下,它在Windows上是动态链接,在Linux上是静态链接,但在Linux上使用动态链接可以获得相同的性能)。这是一个重现问题的简单程序。#include#includeintmain(){intn=100000000;floatsum=1.0f;for(intk=0;k当我使用vTune分析这个程序时,我发现程序集

c++ - 使用 Intel 编译器 : looking at the assembly 的 Windows 和 Linux 之间的性能差异

我正在Windows和Linux(x86-64)上运行一个程序。它使用相同的编译器(IntelParallelStudioXE2017)和相同的选项编译,Windows版本比Linux版本快3倍。罪魁祸首是调用std::erf这两种情况都在英特尔数学库中得到解决(默认情况下,它在Windows上是动态链接,在Linux上是静态链接,但在Linux上使用动态链接可以获得相同的性能)。这是一个重现问题的简单程序。#include#includeintmain(){intn=100000000;floatsum=1.0f;for(intk=0;k当我使用vTune分析这个程序时,我发现程序集

c++ - 内联汇编语言是否比 native C++ 代码慢?

我试图比较内联汇编语言和C++代码的性能,所以我写了一个函数,将两个大小为2000的数组相加100000次。这是代码:#defineTIMES100000voidcalcuC(int*x,int*y,intlength){for(inti=0;i这是main():intmain(){boolerrorOccured=false;setbuf(stdout,NULL);int*xC,*xAsm,*yC,*yAsm;xC=newint[2000];xAsm=newint[2000];yC=newint[2000];yAsm=newint[2000];for(inti=0;i然后我运行该程序

c++ - 内联汇编语言是否比 native C++ 代码慢?

我试图比较内联汇编语言和C++代码的性能,所以我写了一个函数,将两个大小为2000的数组相加100000次。这是代码:#defineTIMES100000voidcalcuC(int*x,int*y,intlength){for(inti=0;i这是main():intmain(){boolerrorOccured=false;setbuf(stdout,NULL);int*xC,*xAsm,*yC,*yAsm;xC=newint[2000];xAsm=newint[2000];yC=newint[2000];yAsm=newint[2000];for(inti=0;i然后我运行该程序