机器码转汇编

有时候,我们在分析问题的时候,能得到的只有机器码,例如

0f 11 01 4c 03 c1 48 83 c1 10 48 83 e1 f0 4c 2b c1 4d

要分析这段代码,可以找intel的数据手册,然后去解析这句话的意思。不过这样效率太低,我们可以通过如下方式分析。

  1. 先把机器码写到文件里
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main(void)
{
    char bin_data[] = {0x0f, 0x11, 0x01, 0x4c, 0x03, 0xc1, 0x48, 0x83, 0xc1, 0x10, 
                        0x48, 0x83, 0xe1, 0xf0, 0x4c, 0x2b, 0xc1, 0x4d};
    int fd = open("1.bin", O_RDWR | O_CREAT);
    if(fd < 0) {
        printf("error opening file\n");
        return 0;
    }
    
    write(fd, bin_data, 18);
    close(fd);
    return 0;
}
  1. 使用objdump进行反汇编
    因为这段机器码是在x86机器上生成的,所以需要指定***-m i386:x86-64***
objdump -b binary -m i386:x86-64  -D 1.bin

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值