草庐IT

IDA汇编

全部标签

c++ - 通过分析汇编列表验证 gcc/g++ 中的编译器优化

我刚刚问了一个与编译器如何优化某些C++code有关的问题,我正在四处寻找关于如何验证编译器是否执行了某些优化的任何问题。我试图查看使用g++(g++-c-g-O2-Wa,-ahl=file.sfile.c)生成的程序集列表,以了解幕后发生的事情,但输出对我来说太神秘了。人们使用什么技术来解决这个问题,是否有关于如何解释优化代码的汇编列表或特定于GCC工具链的文章的任何很好的引用来讨论这个问题? 最佳答案 GCC的优化过程以一种名为GIMPLE的格式处理代码的中间表示。.使用-fdump-*familyofoptions,你可以要求

c++ - 将编译器从 x86 汇编移植到 LLVM

最近,为了磨练我的汇编技能,我用C++为玩具语言编写了一个非常简单的编译器。它运行单channel,并在解析阶段直接将代码发送到多个字符串流,每个字符串流代表一段代码(即一个代表section.bss,而其他代表.data和.text)。然后,将这些字符串流写入一个文件,我使用NASM和gcc来组装和链接它们。我知道这种单遍方法效率极低,但同样,这更像是一种理解代码生成阶段的练习,而不是其他任何东西。无论如何,我想修改我的代码以直接发出LLVMIL而不是原始汇编,再次作为学习练习。是否有任何关于LLVMIL的入门级指南?或者,更好的是,一个工具来确定一行汇编的等效IL代码?我看了看,只

c++ - 浮点比较 < 和 >= 生成的汇编中的严重差异

我正在试验生成的程序集并发现了一件有趣的事情。有两个函数在做相同的计算。它们之间的唯一区别是结果相加的方式。#includedoublefunc1(doublex,doubley){doubleresult1;doubleresult2;if(x*x=0.0){result+=x*x+x+y;}if(y*y>=0.0){result+=y*y+y+x;}returnresult*40.0;}x86clang3.7生成的程序集,-O2打开gcc.godbolt.org仍然如此不同和出乎意料。(在gcc上编译产生类似的程序集).LCPI0_0:.quad463082631684371251

c++ - 谁能帮我从一个简单的 Hello World 中解释这个 MSVC Debug模式反汇编?

我得到了以下简单的C++代码:#includeintmain(void){::printf("\nHello,debugger!\n");}从WinDbg中,我得到了以下反汇编代码:SimpleDemo!main:0111138055pushebp011113818becmovebp,esp0111138381ecc0000000subesp,0C0h0111138953pushebx0111138a56pushesi0111138b57pushedi0111138c8dbd40ffffffleaedi,[ebp-0C0h]01111392b930000000movecx,30h011

Windows/DOS 汇编 - 简单数学

我目前正在学习Windows/DOS汇编。我只是在制作一个小程序,将两个以10为底的整数相加,并将结果输出到标准输出。这是我当前的代码:org100hMOVal,5ADDal,3movdx,almovah,9int21hret我很困惑为什么在编译时出现错误:错误:操作码和操作数的组合无效因为理论上我就是把5放到AL寄存器里,加上3,把AL寄存器的内容取出来放到DX寄存器里输出,然后显示出来。任何帮助将不胜感激,谢谢! 最佳答案 DX是16位寄存器,而AL是8位寄存器。将AL载入DL,并设置DH为0。但这不会做你想做的;函数9[显示以

windows - 汇编中的非法指令

我真的不明白为什么这个简单的代码在第一次尝试时工作正常但是当把它放在一个错误显示的过程中:NTVDMCPU遇到非法指令CS:db22IP:4de4OP:f0ffffffff第一个代码段工作得很好:.modelsmall.stack100h.codestart:movax,@datamovds,axmoves,axMOVAH,02H;setscursorupMOVBH,00HMOVDH,02MOVDL,00INT10HEXIT:MOVAH,4CHINT21HEND但是这会产生一个错误:.modelsmall.stack100h.codestart:movax,@datamovds,axm

windows - 汇编中的 Windows 音频

我正在考虑在8086ASM中使用VGA进行图形制作游戏,但在我进行任何操作之前,我想确保我可以将音频输入到我的项目中。我怀疑PCSpeaker是否足够。我正在寻找一种在8086中为Windows编写音乐程序的方法。我可以直接访问现代声卡中的某种标准,还是必须使用WindowsAPI?我不太确定此时要寻找什么,因此欢迎提出任何建议。 最佳答案 与最终融合到(S)VGA的显示器不同,声卡从未达到相同的兼容性。有不同的SoundBlasters、GravisUltrasound等。如今,现代硬件通常与这些不兼容,如果没有合适的DOS驱动程

c - 带注释的可执行文件反汇编

将C程序编译为目标文件时,很容易让Microsoft编译器使用cl/Fa.我试图从最终链接的可执行文件中获得类似的东西(假设程序是用适当的调试信息编译的),这似乎更棘手;dumpbin和objdump似乎只提供非注释反汇编。获得它的最佳方式是什么? 最佳答案 如果你有使用debuginfo编译的程序,windbg应该提供带有行号的函数反汇编使用调试信息编译的示例代码和使用/Fa生成的汇编文件C:\codesnips\comparesrc\debug>cl/Zi/Facomparesrc.cpp/link/Debugcomparesr

windows - x86 汇编 - Windows 下的非法操作码 0xff/7

我目前正在开发一个x86反汇编器,我开始反汇编一个win32PE文件。大多数反汇编代码看起来不错,但是有一些非法的0xff/7操作码(/7表示reg=111,0xff是操作码组inc/dec/call/callf/jmp/jmpf/push/操作数r/m16/32的非法)。第一个猜测是,/7是pop指令,但它是用0x8f/0编码的。我已经对照官方英特尔架构软件开发人员手册第2卷:指令集引用进行了检查-所以我不仅仅是被误导了。反汇编示例:(S0000O0040683a是被另一条指令跳转到的标签)S0000O0040683a:incedi;0000:0040683affc7testdwor

南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

文章目录一、实验目的和要求二、实验内容三、实验环境(实验设备)四、实验代码五、实验过程描述与结果分析六、实验小结(包括问题和解决方法、心得体会、意见与建议等)一、实验目的和要求1.掌握循环程序的编写以及结束循环的方法。2.掌握DOS、BIOS功能调用的使用方法。二、实验内容用户登录验证程序的实现程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时,显示欢迎界面并返回DOS;否则给出提示信息,用户名或密码错误,再次输入。界面颜色自定(彩色或黑白)三、实验环境(实验设备)XP/WIN7+MASM/TASM