反汇编C代码
如何能够反汇编C代码?我已经在这里读了一些问题(stackoverflow)。但是如果你想反汇编,你需要一个机器代码,那么如何使用nasm呢?所以,如果我用C语言为ex.创建一个Hello World,怎么能做到这一点呢?Nasm是个坏主意。有几个选择。IDA pro给了我一些成功,但如果你真的了解你的汇编,你可以nm的符号,然后hexdump从那里的代码,并手动使汇编出来。不过,使用nasm生成可重新编译的代码并不是唯一的方法 otool(或objdump)将产生装配 如果您需要一些示例:这里:反汇编C代码,c,assembly,nasm,C,Assembly,Nasm,如何能够反汇编C代码?我已经在这里读了一些问题(stackoverflow)。但是如果你想反汇编,你需要一个机器代码,那么如何使用nasm呢?所以,如果我用C语言为ex.创建一个Hello World,怎么能做到这一点呢?Nasm是个坏主意。有几个选择。IDA pro给了我一些成功,但如果你真的了解你的汇编,你可以nm的符号,然后hexdump从那里的代码,并手动使汇编出来。不过,使用nasm生成可重新编译的代码并不是唯一的方法 otool(或objdump)将产生装配 如果您需要一些示例:这里
#include <stdio.h>
main(argc, argv)
int argc; char * * argv;
{
printf("Hello, World\n");
}
耳蜗输出:
hydrogen:tmp phyrrus9$ otool -tv a.out
a.out:
(__TEXT,__text) section
_main:
0000000100000f40 pushq %rbp
0000000100000f41 movq %rsp, %rbp
0000000100000f44 subq $0x10, %rsp
0000000100000f48 leaq 0x37(%rip), %rdi ; this is our string
0000000100000f4f movb $0x0, %al
0000000100000f51 callq 0x100000f66 ; call printf
0000000100000f56 movl $0x0, %ecx
0000000100000f5b movl %eax, 0xfffffffffffffffc(%rbp)
0000000100000f5e movl %ecx, %eax
0000000100000f60 addq $0x10, %rsp
0000000100000f64 popq %rbp
0000000100000f65 ret
未显示hextump输出
实际装配:
hydrogen:tmp phyrrus9$ cat tmp.s
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp4:
.cfi_def_cfa_register %rbp
subq $16, %rsp
leaq L_.str(%rip), %rdi
movb $0, %al
callq _printf
movl $0, %ecx
movl %eax, -4(%rbp) ## 4-byte Spill
movl %ecx, %eax
addq $16, %rsp
popq %rbp
ret
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "Hello, world!\n"
.subsections_via_symbols
希望这能帮助您理解。取决于您的C编译器。使用
gcc
,使用-S
标志。具体取决于编译器。。啊好的
hydrogen:tmp phyrrus9$ cat tmp.s
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main: ## @main
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp4:
.cfi_def_cfa_register %rbp
subq $16, %rsp
leaq L_.str(%rip), %rdi
movb $0, %al
callq _printf
movl $0, %ecx
movl %eax, -4(%rbp) ## 4-byte Spill
movl %ecx, %eax
addq $16, %rsp
popq %rbp
ret
.cfi_endproc
.section __TEXT,__cstring,cstring_literals
L_.str: ## @.str
.asciz "Hello, world!\n"
.subsections_via_symbols