草庐IT

IDA汇编

全部标签

android - ARM 汇编回溯 PC 偏移量

ARM手册提到:Duringexecution,PCdoesnotcontaintheaddressofthecurrentlyexecutinginstruction.TheaddressofthecurrentlyexecutinginstructionistypicallyPC-8forARM,orPC-4forThumb.这是否也适用于崩溃回溯中的PC值?例如,如果我有以下回溯(来自使用ARM指令的Androidarmv7设备):libSomeLib.so!SomeClass::someMethod[someFile.cpp:638+0x4]r0=0x00000001r1=0x

逆向分析工具IDA与开源工具Ghidra、Cutter对比测评

为评估当前逆向工具的效能,特写此文:对比版本 对比其中需要说明的几点:软件名称出品方官网价格反汇编算法功能及平台支持远程调试反编译差异扩展性IDAProIDA商业公司(比利时公司)点击跳转软件+插件单独购买价格几千美金递归下降支持全品类处理器X86,X64,ARM,Linux支持静态分析和动态调试支持,可置入调试组件,网络调试分析目标机程序纯净还原C代码,支持间接寻址加偏移的程序的解析支持C++,Python,JavaScript,OCaml编写插件/处理器模块/文件加载器Ghidra美国国家安全局NSA点击跳转免费线性扫描依赖Java,支持多处理器但未公布类别不支持无法过滤编译器添加的堆栈保

嵌入式:ARM汇编语言程序设计基础教程

文章目录汇编语言程序设计的步骤顺序程序设计分支程序设计循环程序设计子程序设计寄存器传递参数方式存储区域传递参数方式堆栈传递参数方式汇编语言程序设计的步骤①合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。②CPU寄存器数量有限,在程序中,大多数操作都要使用寄存器;并且有的操作使用特定的寄存器(如堆栈操作使用SP/R13等),程序中要合理分配各寄存器的用途。用计算机语言,对数据结构模型和流程图表示的算法进行准确地描述。①语法调试:排除程序中的语法错误。②功能调试:保证程序的逻辑功能正确性。用文档形式记录说明程序的功能、使用方法、程序结构、算法流程等每一个阶段的工作。把解题

android - 是否有针对 Android 设备的设备特定错误的汇编?

我们发现在某些标准Java库中发生的特定设备崩溃。此崩溃仅发生在一种特定型号的设备上。我敢肯定,各种Android设备还有其他奇怪的地方。是否有Android设备已知问题的汇编?我特别考虑提供的库和JVM类型的东西中的奇怪之处。 最佳答案 我不知道互联网上是否有索引汇编。目前,报告/搜索设备特定错误的最佳位置可能仍然是通过AndroidIssuesTracker。,当然,只要消费者开发人员发现并报告了问题。其实,只要熟悉了搜索功能,其实还不错。HTCSpecificBugsSamsungSpecificBugs设备特定的错误是And

c++ - 将汇编代码与 c/c++ 混合

为什么汇编语言代码通常与C/C++一起需要?什么是C/C++做不到的,而混合了汇编语言代码就可以做到?我有一些3D电脑游戏的源代码。有很多汇编代码在使用。 最佳答案 突然想到的事情,排名不分先后:特别说明。在嵌入式应用程序中,我需要在DMA传输填满内存缓冲区后使缓存无效。在SH-4CPU上执行此操作的唯一方法是执行特殊指令,因此内联汇编(或独立的汇编函数)是唯一的方法。优化。曾几何时,编译器不知道所有可能的技巧是很常见的。在某些情况下,用手工制作的版本替换内部循环是值得的。对于小型嵌入式系统中的CPU类型(想想8051、PIC等),

c++ - 如何在 Visual Studio 汇编程序输出中分解名称?

使用VisualStudio2010/2012,可以使用/FAs开关编译c++源文件,以生成结果代码的汇编输出。但是生成的asm文件包含所有符号的错位形式。是否有开关或其他智能方式让VisualStudio生成未损坏的符号?我知道可以通过undname.exe手动提供asm文件,但切换比自定义构建后事件要方便得多。 最佳答案 这是不可能的,因为/FA输出的性质。FA输出有效的汇编代码。表达C++函数的符号在微软的x86程序集中根本不是有效的标签名称。匿名命名空间也没有好的表示法。任何处理这些情况的输出都无法使用汇编程序进行编译。如果

c++ - 在函数中更改数组值 - 内联汇编

所以我不久前自学了x86汇编,并且只是在C++中使用内联汇编。所以我想做的是在一个函数参数中,传入一个数组、一个索引(unsignedint)和一个数字。使用汇编,它会将数组的该内存位置中的值更改为传入的值。所以代码看起来像这样。inlinevoidSet(intpArray[],unsignedintpIndex,intpNum){__asm{movebx,pIndexmoveax,4mulebxmovebx,pNumleaedi,pArraymov[edi+eax],ebx}}intmain(){intmyArray[5]={1,2,3,4,5};Set(myArray,2,7);

c++ - 如何让 gdb tui 汇编输出显示指令?

我想查看程序集输出,但发现在TUI中,它会输出functionsignature+offset:这很酷,除了我用C++编程和函数签名已完全解决,因此我获得了namespace和模板参数,它们使函数sig长了2行或更多行。这当然会在TUI中被截断,因此它甚至无法显示汇编指令。有什么方法可以缩短、更改前缀(可能是文件/行格式)或根本不将此前缀输出到汇编指令? 最佳答案 虽然目前无法截断此前缀,但解决方法是使用focusasm命令将焦点设置到程序集窗口(如果asm窗口不是focus),然后使用向右箭头键,您可以将窗口向右滚动,最终将显示程

c++ - "Custom intrinsic"x64 函数而不是内联汇编可能吗?

我目前正在尝试为我的库创建高度优化、可重用的函数。例如,我按以下方式编写函数“是2的幂”:templateinlineboolis_power_of_two(constIntTypex){return(x!=0)&&((x&(x-1))==0);}作为内联C++模板,这是一个可移植、低维护的实现。这段代码被VC++2008编译为如下带有分支的代码:is_power_of_twoPROCtestrcx,rcxjeSHORT$LN3@is_power_olearax,QWORDPTR[rcx-1]testrax,rcxjneSHORT$LN3@is_power_omoval,1ret0$L

C++/C 汇编级问题

在函数(C/C++)中使用全局变量时,是直接从寄存器中取还是从栈中取?为什么绑定(bind)循环(for循环)被认为比非绑定(bind)循环(while循环/dowhile)具有更大的优化空间?为什么返回值不如通过引用传递值好?如果可能,请给出assembly级别的描述。 最佳答案 1)它将取自作为应用程序加载的一部分分配的地址。即全局变量只是进程虚拟地址空间中的一个地址。如果最近使用了该全局变量,则编译器可能能够将其缓存在寄存器中。2)他们没有。3)返回值通常需要数据的拷贝。如果数据是简单类型(例如int或float),那么它可以