debian反汇编工具安装与使用指南
一、常用工具与安装命令
sudo apt update && sudo apt install binutilssudo apt install gdbsudo apt install radare2sudo apt install nasmsudo apt install libcapstone-dev二、快速上手示例
objdump -d your_binaryobjdump -d -M intel your_binaryobjdump -d -j .text your_binaryobjdump -d --start-address=0x401000 --stop-address=0x401100 your_binaryobjdump -S your_binarygdb your_binary(gdb) disassemble(gdb) disassemble main(gdb) disassemble 0x401000,0x401100(gdb) layout asmr2 your_binary[0x...]> pdf[0x...]> pdf @ mainndisasm -b 32 your_binaryndisasm -b 64 your_binarysudo apt install libcapstone-devgcc -o disassembler disassembler.c -lcapstone(示例源码见下文“进阶”)三、如何选择工具
layout asm 与源码/汇编混合)。四、进阶 capstone 示例
sudo apt install libcapstone-dev#include <stdio.h>
#include <capstone/capstone.h>
int main(int argc, char *argv[]) {
csh handle;
cs_insn *insn;
size_t count, i;
if (argc != 3) {
printf("Usage: %s <binary_file> <arch: x86|x86_64|arm|arm64>\n", argv[0]);
return 1;
}
cs_arch arch;
cs_mode mode;
if (strcmp(argv[2], "x86") == 0) { arch = CS_ARCH_X86; mode = CS_MODE_32; }
else if (strcmp(argv[2], "x86_64") == 0) { arch = CS_ARCH_X86; mode = CS_MODE_64; }
else if (strcmp(argv[2], "arm") == 0) { arch = CS_ARCH_ARM; mode = CS_MODE_ARM; }
else if (strcmp(argv[2], "arm64") == 0) { arch = CS_ARCH_ARM64; mode = CS_MODE_ARM; }
else { fprintf(stderr, "Unsupported arch: %s\n", argv[2]); return 1; }
if (cs_open(arch, mode, &handle) != CS_ERR_OK) {
fprintf(stderr, "Failed to initialize Capstone\n");
return 1;
}
unsigned char buf[4096];
FILE *f = fopen(argv[1], "rb");
if (!f) { perror("fopen"); return 1; }
size_t n = fread(buf, 1, sizeof(buf), f);
fclose(f);
count = cs_disasm(handle, buf, n, 0, &insn);
if (count > 0) {
for (i = 0; i < count; i++) {
printf("0x%" PRIx64 ":\t%s\t%s\n", insn[i].address, insn[i].mnemonic, insn[i].op_str);
}
cs_free(insn, count);
} else {
fprintf(stderr, "Failed to disassemble given file\n");
}
cs_close(&handle);
return 0;
}
gcc -o disassembler disassembler.c -lcapstone./disassembler your_binary x86_64