草庐IT

IDA反汇编

全部标签

c++ - 我如何使用汇编程序从英特尔处理器中获取随机数?

我需要从英特尔处理器(英特尔酷睿i3)中的随机生成器获取随机数。我不想使用任何图书馆。我想在C++中使用汇编程序粘贴,但我不知道应该使用哪些寄存器和指令。 最佳答案 在支持的CPU(目前只有IvyBridge和HaswellIntelCPU)上调用RDRAND指令会将一个随机值放入指定的寄存器中。例如,这将为您提供一个随机的64位值:RDRAND%rax成功时,进位位将被设置。参见英特尔的BullMountainSoftwareImplementationGuide更多细节。(“BullMountain”是英特尔硬件RNG的代号。)

c++ - 逆向工程的汇编语言

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。学习汇编应该选择NASM还是MASM?我想学习汇编,动机是逆向工程。这样当我反汇编一些可执行文件时,我可以通过查看反汇编代码来理解代码。更新:我想我不能让自己清楚。我知道那些是汇编程序,但要了解反汇编程序的输出,我需要了解汇编,这就是我问从哪里开始(使用MASM或NASM)的原因)

c++ - 在 C++ 中使用乘法累加指令内联汇编

我正在ARM9处理器上实现FIR滤波器并尝试使用SMLAL指令。最初我实现了以下过滤器并且它工作得很好,除了这种方法使用太多的处理能力而无法在我们的应用程序中使用。uint32_tDDPDataAcq::filterSample_8k(uint32_tsample){//Thisroutineisbasedonthefir_double_zroutineoutlinebyGrantRGriffin//-www.dspguru.com/sw/opendsp/alglib.htminti=0;int64_taccum=0;constint32_t*p_h=hCoeff_8K;constin

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驱动程