草庐IT

gdb dis 反汇编

全部标签

c++ - 为什么简单的内联汇编函数不能在 GCC 中正常工作?

我有一个简单的内联汇编函数,它在MSVC中运行良好,但由于某种原因拒绝在AppleGCC4.2.1下运行(i386arch,强制32位模式)。幸运的是,更复杂的汇编函数可以正常工作,但是我不明白为什么这个函数不起作用...不幸的是,我无法调试它-从外观上看,XCode中没有寄存器窗口4.0.2(它是3.2版本)。我很肯定这个问题与英特尔风格的汇编无关。intConvert(doublevalue){_asm{fldvaluepusheaxfistpdwordptr[esp]popeax}//Thereturnedvalueisinsane} 最佳答案

c++ - getch 相当于汇编语言

我在汇编语言中编程,在C++中使用x86,我需要知道汇编语言中的getch等价物而不是C++语言,因为我不想使用C++编程语言中的任何函数。我在网上找到了代码,但它将给定值保存到一个变量中,并在C++中创建。我只想使用该功能来停止程序,直到按下任何键。我不必在进一步的编程中使用输入的键值。 最佳答案 这是一个特定于操作系统的问题。例如,如果您使用的是Linux,则可以像这样发出read系统调用:;Allocatesomestackbuffer...subesp,256moveax,3;3=__NR_readfrommovebx,0;

c++ - GCC 汇编代码生成错误和解决方法

GCC4.5.2(在Ubuntu11.10x64上,但编译为32位)生成无效的汇编代码,我很好奇是否可以在不更改代码的情况下修复,只需应用选项或类似的东西。请注意,优化已经是-O0。我有两个功能:inlinelongClass::Get(){longv=*(long*)(m_p);m_p+=4;returnv;}inlinevoidClass::Command(){m_p+=Get();}GCC4.5.2生成此汇编代码:9840m_p+=Get();f689eff5:mov0x8(%ebp),%eaxf689eff8:mov0xd4(%eax),%eaxf689effe:mov%eax

c++ - 将 GCC 内联汇编 CMOV 转换为 Visual Studio 汇编器

文章中Linearvs.BinarySearch,有一个使用CMOV指令的二进制搜索的快速实现。我想在VC++中实现它,因为我正在处理的应用程序依赖于二进制搜索的性能。该实现有一些GCC内联汇编器,声明如下:staticintbinary_cmov(constint*arr,intn,intkey){intmin=0,max=n;while(min>1;asm("cmpl%3,%2\n\tcmovg%4,%0\n\tcmovle%5,%1":"+r"(min),"+r"(max):"r"(key),"g"(arr[middle]),"g"(middle+1),"g"(middle));

c++ - 如何通过反汇编从 C++ 函数中获取 "lea"指令?

我正在尝试学习逆向工程,但我被这件小事困住了。我有这样的代码:.text:10003478moveax,HWHandle.text:1000347Dleaecx,[eax+1829B8h]我想知道,它在C或C++中看起来如何?尤其是箭头所指的两条指令。HWHandle是一个变量,它保存从GetModuleHandle()函数返回的值。更有趣的是,在这条指令下面的几行中,dword_1000FCA0被用作一个函数:.text:1000353Cmoveax,dword_1000FCA0.text:10003541movecx,[eax+0A0h].text:10003547pushoffs

c++ - 用于多态调用的 x86-64 汇编器

我有C++代码:intmain(){M*m;O*o=newIO();H*h=newH("A");if(__rdtsc()%5==0){m=newY(o,h);}else{m=newZ(o,h);}m->my_virtual();return1;}虚拟调用由这个asm表示:movrax,qwordptr[x]movrax,qwordptr[rax]movrcx,qwordptr[x]callqwordptr[rax]这比我预期的vtable方法调用多了一行。所有四个ASM行都特定于多态调用吗?上面四行怎么伪读?这是完整的ASM和C++(虚拟调用在最后进行):intmain(){addby

c++ - 内联汇编会影响可移植性吗?

假设您编写了可在不同平台上流畅运行的可移植C++代码。要进行一些修改以优化性能,您可以在代码中使用内联汇编。这是一个好的做法(搁置编译器优化)还是会给可移植性带来麻烦? 最佳答案 显然它破坏了可移植性——代码只能在汇编语言所针对的特定体系结构上工作。此外,这通常是浪费时间-编译器的优化器几乎肯定比您更擅长编写汇编代码。 关于c++-内联汇编会影响可移植性吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c++ - SPARC : How to handle integer doubleword pairs? 的 GCC 内联汇编

据我了解,在SPARC中,32位整数存储在单个寄存器中,64位整数存储在相邻的寄存器对中,偶数寄存器包含高32位,奇数寄存器包含低位32位。我需要编写一些专门的SPARC内联汇编宏(内联汇编函数也可以)来处理64位整数双字对,但我不知道如何进行通用引用(使用GCC扩展内联汇编)到我的内联汇编中这对的两半。虽然我的汇编宏比下面显示的MULTIPLY()宏稍微复杂一点,但乘法示例(如果有效)将演示如何处理64位双字对的两半。谁能告诉我如何修复我的MULTIPLY()宏?以防万一,我在...bash-2.03$uname-aSunOS[...]5.8Generic_117350-39sun4

【ARM汇编】如何对键入数据做判断?

大家好,我是汤姆凯特。文章目录【ARM汇编练习】如何对键入数据做判断?写在前面:如何对键入数据的正负数做判断?想要对键入数组做判断有两种方式:1先写出C语言的伪代码2.框架3.修改全局变量4.循环中调用scanf5.对获取到的值进行判断第一种方式:第二种方式:6.源代码7.运行验证总结每篇前言☀️作者简介:大家好我是汤姆凯特,大家可以叫我汤姆🐋个人主页:IM汤姆凯特的CSDN博客🎁系列专栏:【ARM嵌入式基础】🌱每日一句:“我们人生的意义是什么?人生的目的在哪里?对于这个人生最基本的问题,我认为必须从正面回答。我的答案是:提升心性,磨练灵魂。”——稻盛和夫【ARM汇编练习】如何对键入数据做判断

汇编语言程序设计(二)十六位汇编框架、子程序与堆栈

寄存器如下是16位通用寄存器,存储在cpu硬件中AX返回值AX寄存器分为两部分AH和ALAH高8位存储功能号AL低8位存储返回码以下是一个AX寄存器应用:movax,4c00h4c给高位AL,00低位AL,16进制要以h结尾BXCX计数器DXSI目标寄存器DI源寄存器SP栈顶指针寄存器BP栈底指针寄存器16位堆栈每单元占2字节常见编译器指令r查看寄存器及下一行的指令u查看汇编代码t单步步入遇见子程序进入内部遇到int21h指令时不要用tp单步步过遇见子程序执行到子程序的下一行,忽略子程序的内部实现g运行q退出d读内存dss:fffe07000007常见汇编指令MOV数据传送指令:格式:MOVO