disassembly相关内容

如何使用LLVM将基于堆栈的虚拟机字节码转换为SSA格式

有许多关于如何将SSA表示转换为堆栈计算机的问题,但我对相反的情况很感兴趣。 问题 考虑具有有条件/无条件跳转的基于堆栈的VM,其中每个操作码都有固定数量的它消耗和生成的堆栈元素。 LLVM框架中是否有工具/方法可以从字节码输出重构SSA表单。这实质上是一种反汇编形式。 llvm 推荐答案本身没有工具,只是sSMoP。我已经做到了。有些是困难的,但任何事情都是困难的。 ..
发布时间:2022-03-21 22:48:48 其他开发

理解一个简单的C程序生成的汇编代码

我试图通过使用 gdb 的反汇编程序检查一个简单的 C 程序的汇编级代码. 以下是C代码: #include 无效函数(int a,int b,int c){字符缓冲区1[5];字符缓冲区2[10];}无效的主要(){函数(1,2,3);} 以下是 main 和 function 的反汇编代码 gdb) disass main函数 main 的汇编代码转储:0x08 ..
发布时间:2022-01-22 12:47:23 服务器开发

局部变量的内存分配浪费

这是我的程序: void test_function(int a, int b, int c, int d){整数标志;字符缓冲区[10];标志 = 31337;缓冲区[0] = 'A';}int main() {test_function(1, 2, 3, 4);} 我用调试选项编译这个程序: gcc -g my_program.c 我使用 gdb 并使用 intel 语法反汇编 tes ..
发布时间:2022-01-20 20:13:33 其他开发

如何使用 GDB 反汇编内存范围?

我正在尝试反汇编程序以查看 syscall 汇编指令(我相信是 INT 指令)和带有 GDB 的处理程序,并为它编写了一个小程序(见下文),用于打开和关闭文件. 我能够使用 GDB 跟踪对 fopen 的调用,直到它执行调用为止. 当我试图告诉 GDB“反汇编 0x...."(调用地址)时,它的响应是“没有函数包含指定的地址." 是否可以强制 GDB 反汇编(或在汇编器中尽可能好 ..
发布时间:2022-01-20 20:03:06 其他开发

将数据与 ARM 中的指令区分开来

在(32 位)ARM Linux 内核中,如何区分嵌入在代码段中的数据和指令? 最好有一个轻量级的方法,比如位掩码,可以很容易地实现.将反编译器嵌入内核是不明智的. 解决方案 一般来说,你要求的是不可能的. 考虑一下这个函数,它碰巧使用了一个太大而无法编码为立即数的数据值: @ void patch_nop(void *code_addr);补丁号:ldr r1, =0xe1 ..
发布时间:2022-01-17 13:43:50 其他开发

在编译过程中如何查看解析树、中间代码、优化代码和汇编代码?

我正在学习编译器课程,程序编译如下步骤 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成. 如何查看每个步骤的输出,例如我想在语法分析后查看解析树. 我正在使用 GCC 编译器在 Linux 机器上编译程序. 我们可以在gcc中使用-Wa编译器选项查看程序的汇编代码,同样有查看Tokens、Parse tree和Inetmediate code的 ..
发布时间:2022-01-17 08:07:27 其他开发

继续获取 e8 00 00 00 00 作为机器代码以在汇编中调用函数

我知道在我的文件中使用 objdump -dr 时 call 在机器代码中显示为 e8 00 00 00 00 因为它没有尚未被链接.但我需要找出链接器完成工作后 00 00 00 00 会变成什么.我知道它应该计算偏移量,但我对此有点困惑. 以下面的代码为例,链接器部分完成后,e8 00 00 00 00应该如何?我如何得到这个答案? 我正在使用此示例代码进行测试:(我正在尝试调用 ..
发布时间:2022-01-11 15:41:52 其他开发

从二进制文件中确定源语言?

我回复了 另一个关于使用非 Objective-C 语言为 iPhone 开发的问题,我断言使用 C# 为 iPhone 编写会令 Apple 审稿人犯错.我主要是在谈论所讨论的 ObjC 和 C# 库之间的 UI 元素不同,但一位评论者提出了一个有趣的观点,让我想到了这个问题: 是否有可能仅从其二进制文件中确定程序的编写语言?如果有这样的方法,它们是什么? 让我们假设问题的目的: ..
发布时间:2022-01-09 19:20:07 其他开发

如何解释 objdump 反汇编输出列?

我用 c 编写了一个简单的程序,它调用一个名为 while_loop 的函数,参数为 4,3,2.该函数基本上只是一个 while 循环,我认为它与我的问题并不真正相关,因为它更像是一个通用问题.有人告诉我运行 objdump -d,所以我做了. 我有多个问题,所以这里是: 我知道在最左边的列中有地址,它们根据前面的字节数递增.我不太明白的是第二列.它是正在执行的指令,但是是十六进制的 ..
发布时间:2022-01-06 13:09:30 其他开发

如何反汇编、修改然后重新组装 Linux 可执行文件?

有没有办法做到这一点?我已经使用了 objdump,但它不会产生任何我知道的任何汇编程序都会接受的汇编输出.我希望能够更改可执行文件中的指令,然后再对其进行测试. 解决方案 我认为没有任何可靠的方法可以做到这一点.机器码格式非常复杂,比汇编文件还要复杂.实际上不可能采用编译后的二进制文件(例如,ELF 格式)并生成一个源汇编程序,该程序将编译为相同(或足够相似)的二进制文件.要了解差异,请 ..
发布时间:2022-01-06 12:41:50 服务器开发

将机器码转换为 LLVM IR(将 X86_64.X86.ARM 反汇编/重组为 LLVM 位码)

我想将 X86_64、x86、ARM 可执行文件翻译成 LLVM IR(反汇编). 您建议什么解决方案? 解决方案 mcsema 是一个生产质量的二进制提升器.它需要 x86 和 x86-64 并静态“提升"到 LLVM IR.它得到积极维护,获得 BSD 许可,并拥有大量测试和文档. https://github.com/trailofbits/mcsema ..
发布时间:2021-12-18 09:26:15 其他开发

获取装配说明的大小

我需要从内存中的一小段代码中逐条读取指令,并且必须找出内存中指令的大小. 以下只是解释我的问题的原始反汇编代码示例: (gdb) disas/r 0x400281,+8将汇编代码从 0x400281 转储到 0x400289:0x0000000000400281: 48 89 c7 movq %rax, %rdi0x0000000000400284: b0 00 movb $0, %al ..
发布时间:2021-12-18 09:14:17 其他开发

如何查看 C++ 程序的汇编代码?

如何查看 C++ 程序的汇编代码? 有哪些流行的工具可以做到这一点? 解决方案 询问编译器 如果您自己构建程序,您可以要求您的编译器发出汇编源代码.对于大多数 UNIX 编译器,使用 -S 开关. 如果您使用的是 GNU 汇编程序,则使用 -g -Wa,-alh 进行编译将在标准输出上提供混合的源代码和程序集(-Wa 询问编译器驱动程序将选项传递给汇编程序,-al 打开汇 ..
发布时间:2021-12-18 09:05:28 C/C++开发

如何在 Linux 中反汇编二进制可执行文件以获取汇编代码?

有人告诉我使用反汇编程序.gcc 有内置的东西吗?最简单的方法是什么? 解决方案 我不认为 gcc 有标志,因为它主要是一个编译器,但另一个 GNU 开发工具有.objdump 需要一个 -d/--disassemble 标志: $ objdump -d/path/to/binary 反汇编如下: 080483b4 :80483b4: 8d 4c 24 04 lea 0x4(%esp ..
发布时间:2021-12-18 09:02:26 服务器开发

@plt 在这里是什么意思?

0x00000000004004b6 : callq 0x400398 有人知道吗? 更新 为什么两个 disas printf 给我不同的结果? (gdb) disas printf函数 printf@plt 的汇编代码转储:0x0000000000400398 : jmpq *0x2004c2(%rip) # 0x600860 ..
发布时间:2021-12-18 08:54:55 其他开发

编译过程中如何查看解析树、中间代码、优化代码和汇编代码?

我正在学习编译器课程,程序的编译遵循以下步骤 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成. 如何查看每个步骤的输出,例如我想在语法分析后查看解析树. 我正在使用 GCC 编译器在 Linux 机器上编译程序. 我们可以通过gcc中的-Wa编译器选项查看程序的汇编代码,类似的还有查看Tokens、Parse tree和Inetmediate代 ..
发布时间:2021-12-12 23:54:58 其他开发

为什么64位VC++编译器在函数调用后添加nop指令?

我已经使用 Visual Studio C++ 2008 SP1,x64 C++ 编译器编译了以下内容: 我很好奇,为什么编译器要在那些 call 之后添加那些 nop 指令? PS1.我会理解第二个和第三个 nop 将在 4 个字节的边距上对齐代码,但第一个 nop 打破了这个假设. PS2.编译的 C++ 代码中没有循环或特殊的优化内容: CTestDlg::CTestDl ..
发布时间:2021-11-26 15:00:29 C/C++开发

ASM x64 中 40h REX 操作码的目的是什么?

我一直在尝试了解用于 ASM x64 指令的 0x40 REX 操作码的用途.例如,在 Kernel32.dll 的这个函数序言中: 如你所见,他们使用 push rbx 作为: 40 53 push rbx 但仅使用 53h 操作码(不带前缀)也会产生相同的结果: 根据本站,REX前缀的布局如下: 所以 40h 操作码似乎没有做任何事情.有人能解释一下它的用途吗? 解 ..
发布时间:2021-11-25 06:45:52 C#