标签: disassembly

如何在Android平台上反编译APK或DEX文件?

是否可以在Android平台上反编译APK或DEX文件?有没有可以反编译APK文件的工具?

android decompiling disassembly malware-detection

133
推荐指数
6
解决办法
23万
查看次数

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

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

有什么流行的工具可以做到这一点?

c++ assembly disassembly

128
推荐指数
9
解决办法
8万
查看次数

@plt在这里意味着什么?

0x00000000004004b6 <main+30>:   callq  0x400398 <printf@plt>
Run Code Online (Sandbox Code Playgroud)

有谁知道?

UPDATE

为什么两个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>:  mov    %rdx,0x30(%rsp)
0x00000037aa44d36c <printf+12>: movzbl %al,%edx
0x00000037aa44d36f <printf+15>: mov    %rsi,0x28(%rsp)
0x00000037aa44d374 <printf+20>: lea    0x0(,%rdx,4),%rax
0x00000037aa44d37c <printf+28>: lea    0x3f(%rip),%rdx        # 0x37aa44d3c2 <printf+98>
Run Code Online (Sandbox Code Playgroud)

assembly disassembly

71
推荐指数
2
解决办法
3万
查看次数

如何使用objdump反汇编一个函数?

我的系统上安装了二进制文件,并希望查看给定函数的反汇编.优选使用objdump,但其他解决方案也是可以接受的.

这些问题我已经了解到,如果我只知道边界地址,我可能能够反汇编部分代码.从这个答案我已经学会了如何将我的拆分调试符号转换回单个文件.

但即使在单个文件上运行,甚至反汇编所有代码(即没有启动或停止地址,但只是简单的-d参数objdump),我仍然没有在任何地方看到该符号.这是有道理的,因为有问题的函数是静态的,所以它不会被导出.然而,valgrind将报告函数名称,因此它必须存储在某处.

查看调试部分的详细信息,我找到了本.debug_str节中提到的名称,但我不知道可以将其转换为地址范围的工具.

elf debug-symbols objdump disassembly dwarf

71
推荐指数
5
解决办法
5万
查看次数

如何写一个反汇编程序?

我有兴趣将x86解析器编写为教育项目.

我发现的唯一真正资源是Spiral Space," 如何编写反汇编程序 ".虽然这给出了反汇编程序各个组件的高级描述,但我对一些更详细的资源感兴趣.我还快速浏览了一下NASM的源代码,但这有点重要.

我意识到这个项目的一个主要挑战是我将要处理的相当大的x86指令集.我也对基本结构,基本反汇编链接等感兴趣.

有人能指出我有关编写x86反汇编程序的任何详细资源吗?

x86 disassembly

65
推荐指数
3
解决办法
2万
查看次数

GCC如何优化循环内增加的未使用变量?

我写了这个简单的C程序:

int main() {
    int i;
    int count = 0;
    for(i = 0; i < 2000000000; i++){
        count = count + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想看看gcc编译器如何优化这个循环(显然添加1 2000000000次应该是"一次添加2000000000 ").所以:

GCC test.c的,然后timea.out给出了:

real 0m7.717s  
user 0m7.710s  
sys 0m0.000s  
Run Code Online (Sandbox Code Playgroud)

$ gcc -O2 test.c 然后time ona.out`给出:

real 0m0.003s  
user 0m0.000s  
sys 0m0.000s  
Run Code Online (Sandbox Code Playgroud)

然后我用两个人拆开了gcc -S.第一个似乎很清楚:

    .file "test.c"  
    .text  
.globl main
    .type   main, @function  
main:
.LFB0:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    movq    %rsp, %rbp
    .cfi_offset 6, …
Run Code Online (Sandbox Code Playgroud)

c gcc disassembly compiler-optimization

64
推荐指数
1
解决办法
7410
查看次数

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

我被告知要使用反汇编程序.是否gcc有建于什么?最简单的方法是什么?

c++ linux assembly executable disassembly

62
推荐指数
4
解决办法
12万
查看次数

如何用GDB拆卸内存范围?

我正在尝试反汇编程序以查看系统调用汇编指令(我相信INT指令)和GDB处理程序,并编写了一个程序(见下文),用于打开和关闭文件.

我能够跟随调用与GDB打开,直到它执行了一个调用.

当我试图告诉GDB"反汇编0x ...."(调用地址)时,它回复"没有函数包含指定的地址".

是否有可能强制GDB以内存地址反汇编(或在尽可能好的汇编程序中显示它)?如果是这样,怎么样?

#include <stdio.h>
#include <stdlib.h>

int main() {
    FILE* f;
    f = fopen("main.c", "r");
    if (!f) { 
      perror("open");
      return -1;
    }
    fclose(f);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

gdb disassembly

58
推荐指数
5
解决办法
10万
查看次数

Mac OS X中您最喜欢的反汇编工具是什么?

我现在用的otool,nmFraise文本编辑器拆解Mach-o二进制文件.此时我的工作流程非常简单:

    1.列出现有符号.
nm -g
Run Code Online (Sandbox Code Playgroud)
    2.获取诅咒代码.
otool -vt
Run Code Online (Sandbox Code Playgroud)
    3.将此输出复制并粘贴到文本文件中.
    4.在文本编辑器中阅读和注释代码:)

我正在寻找简化使用disasm代码的工具Mac OS X.

macos assembly otool disassembly nm

54
推荐指数
2
解决办法
4万
查看次数

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

无论如何这可以做到吗?我已经使用了objdump但是这不会产生任何我知道的汇编程序可以接受的汇编输出.我希望能够在可执行文件中更改指令,然后再对其进行测试.

linux x86 objdump disassembly

48
推荐指数
4
解决办法
2万
查看次数