草庐IT

IDA汇编

全部标签

c++ - 反汇编 C++ 可执行文件的最佳 Linux 工具

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。哪个工具最适合反汇编C++可执行文件?我正在寻找类似OllyDbg但适用于Linux的东西。编辑:抱歉,忘了告诉我我也希望能够调试,而不仅仅是查看asm代码。EDIT2:我所说的“最佳”是指-“最适合Windows的是OllyDbg-可以查看asm代码并可以调试,它对用户友好且非常强大。哪个最适合Linux”。

c - 如何在 gcc 内联汇编中使用全局变量

我正尝试像这样对全局变量使用内联汇编,但编译器报错说未定义对saved_sp的引用。__asm____volatile__("movqsaved_sp,%rsp\n\t");saved_sp全局声明为staticlongsaved_sp(对于文件)。我在这里犯了什么错误? 最佳答案 如果saved_sp是static,但在不工作时工作,那么编译器似乎已决定saved_sp未在您的源文件中使用,因此决定从编译代码中完全省略它传递给汇编程序。编译器不理解asmblock中的汇编代码;它只是将其粘贴到它生成的汇编代码中。所以它不知道asm

c - 如何在 gcc 内联汇编中使用全局变量

我正尝试像这样对全局变量使用内联汇编,但编译器报错说未定义对saved_sp的引用。__asm____volatile__("movqsaved_sp,%rsp\n\t");saved_sp全局声明为staticlongsaved_sp(对于文件)。我在这里犯了什么错误? 最佳答案 如果saved_sp是static,但在不工作时工作,那么编译器似乎已决定saved_sp未在您的源文件中使用,因此决定从编译代码中完全省略它传递给汇编程序。编译器不理解asmblock中的汇编代码;它只是将其粘贴到它生成的汇编代码中。所以它不知道asm

linux - 32 位 x86 汇编中堆栈对齐的职责

我试图清楚地了解谁(调用者或被调用者)负责堆栈对齐。64位汇编的情况很清楚,它是由caller完成的。引用SystemVAMD64ABI,第3.2.2节堆栈框架:Theendoftheinputargumentareashallbealignedona16(32,if__m256ispassedonstack)byteboundary.换句话说,应该安全地假设,对于被调用函数的每个入口点:16|(%rsp+8)持有(额外八个是因为call隐含地将返回地址压入堆栈)。它在32位世界中看起来如何(假设cdecl)?我注意到gcc使用以下构造将对齐放在被调用函数中:andesp,-16这似乎

linux - 32 位 x86 汇编中堆栈对齐的职责

我试图清楚地了解谁(调用者或被调用者)负责堆栈对齐。64位汇编的情况很清楚,它是由caller完成的。引用SystemVAMD64ABI,第3.2.2节堆栈框架:Theendoftheinputargumentareashallbealignedona16(32,if__m256ispassedonstack)byteboundary.换句话说,应该安全地假设,对于被调用函数的每个入口点:16|(%rsp+8)持有(额外八个是因为call隐含地将返回地址压入堆栈)。它在32位世界中看起来如何(假设cdecl)?我注意到gcc使用以下构造将对齐放在被调用函数中:andesp,-16这似乎

linux - ARM汇编 "retne"指令

我目前正在了解Linux内核启动需要什么。我正在浏览Linux内核源代码树,特别是ARM架构,直到我在arch/arm/kernel/hyp-stub.S中偶然发现这条汇编指令retnelr从概念上讲,很容易理解,如果Z标志为0,则指令应该返回存储在链接寄存器中的地址。我正在寻找的是实际记录此ARM汇编指令的位置。我在ARMArchitectureReferenceManualARMv7-AandARMv7-Redition中搜索sectionA8.8找不到指令的描述。Grep源并查看它是否是ARMspecificGNUASextension没有发现任何特别的东西。谷歌搜索查询“arm

linux - ARM汇编 "retne"指令

我目前正在了解Linux内核启动需要什么。我正在浏览Linux内核源代码树,特别是ARM架构,直到我在arch/arm/kernel/hyp-stub.S中偶然发现这条汇编指令retnelr从概念上讲,很容易理解,如果Z标志为0,则指令应该返回存储在链接寄存器中的地址。我正在寻找的是实际记录此ARM汇编指令的位置。我在ARMArchitectureReferenceManualARMv7-AandARMv7-Redition中搜索sectionA8.8找不到指令的描述。Grep源并查看它是否是ARMspecificGNUASextension没有发现任何特别的东西。谷歌搜索查询“arm

linux - 在 IDA 中使用参数调试可执行文件

在反汇编器和调试器IDA中,有什么方法可以使用命令行参数运行当前加载的二进制文件?例如,假设我有命令/bin/ls并想将其调试为/bin/lstest.txt,我如何在IDA中执行此操作? 最佳答案 转到Debugger/Processoptions...菜单项并在Parameterstest.txt参数字段。可执行文件(包括二进制文件)的路径将在Application字段中。 关于linux-在IDA中使用参数调试可执行文件,我们在StackOverflow上找到一个类似的问题:

linux - 在 IDA 中使用参数调试可执行文件

在反汇编器和调试器IDA中,有什么方法可以使用命令行参数运行当前加载的二进制文件?例如,假设我有命令/bin/ls并想将其调试为/bin/lstest.txt,我如何在IDA中执行此操作? 最佳答案 转到Debugger/Processoptions...菜单项并在Parameterstest.txt参数字段。可执行文件(包括二进制文件)的路径将在Application字段中。 关于linux-在IDA中使用参数调试可执行文件,我们在StackOverflow上找到一个类似的问题:

linux - 使用 GNU 汇编程序在 x86_64 中调用 printf

我使用AT&T语法编写了一个程序,用于GNU汇编程序:.dataformat:.ascii"%d\n".text.globalmainmain:mov$format,%rbxmov(%rbx),%rdimov$1,%rsicallprintfret我使用GCC来汇编和链接:gcc-omainmain.s我用这个命令运行它:./main当我运行该程序时出现段错误。通过使用gdb,它说printfnotfound。我试过“.externprintf”,它不起作用。有人建议我应该在调用printf之前存储堆栈指针并在RET之前恢复,我该怎么做? 最佳答案