Questions tagged «disassembly»



7
如何使用objdump反汇编一个函数?
我的系统上安装了二进制文件,并希望查看给定功能的反汇编。最好使用objdump,但其他解决方案也是可以接受的。 从这些问题中,我了解到,如果我只知道边界地址,则可以分解部分代码。从这个答案中,我学习了如何将拆分的调试符号转回单个文件。 但是,即使对单个文件进行操作,甚至分解所有代码(即,没有开始或停止地址,但使用的普通-d参数objdump),我仍然看不到该符号。只要所讨论的函数是静态的,就有意义,因此不会导出。不过,valgrind将报告函数名称,因此必须将其存储在某处。 查看调试部分的详细信息,我发现该.debug_str部分中提到的名称,但是我不知道有什么工具可以将其转换为地址范围。


2
@plt在这里是什么意思?
0x00000000004004b6 <main+30>: callq 0x400398 <printf@plt> 有谁知道? 更新 为什么两个disas printf给我不同的结果? (gdb) disas printf Dump of assembler code for function printf@plt: 0x0000000000400398 <printf@plt+0>: jmpq *0x2004c2(%rip) # 0x600860 <_GLOBAL_OFFSET_TABLE_+24> 0x000000000040039e <printf@plt+6>: pushq $0x0 0x00000000004003a3 <printf@plt+11>: jmpq 0x400388 (gdb) disas printf Dump of assembler code for function printf: 0x00000037aa44d360 <printf+0>: sub $0xd8,%rsp 0x00000037aa44d367 <printf+7>: …

5
如何编写反汇编程序?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我有兴趣将x86分解器编写为一个教育项目。 我发现的唯一真正的资源是Spiral Space的“如何编写反汇编程序”。尽管这对反汇编程序的各个组件进行了很好的高级描述,但我对一些更详细的资源感兴趣。我也快速浏览了NASM的源代码,但这是一个值得借鉴的重要内容。 我意识到这个项目的主要挑战之一是我将要处理的相当大的x86指令集。我也对基本结构,基本反汇编程序链接等感兴趣。 谁能指出我编写x86反汇编程序的详细资源?
68 x86  disassembly 

4
为什么C编译器会优化开关,以及是否有所不同
当我偶然发现一个奇怪的问题时,我正在从事一个个人项目。 在一个非常紧密的循环中,我有一个整数,其值在0到15之间。对于值0、1、8和9,我需要获取-1,对于值4、5、12和13,我需要获取1。 我转向godbolt检查一些选项,并惊讶于编译器似乎无法以与if链相同的方式优化switch语句。 链接在这里:https : //godbolt.org/z/WYVBFl 代码是: const int lookup[16] = {-1, -1, 0, 0, 1, 1, 0, 0, -1, -1, 0, 0, 1, 1, 0, 0}; int a(int num) { return lookup[num & 0xF]; } int b(int num) { num &= 0xF; if (num == 0 || num == …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.