objdump(Linux)反汇编命令常用指南

objdump反汇编示例

随便写一个字符设备驱动 irq.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int major,minor,devid;
struct class *class;
struct cdev cdev;
static ssize_t irq_read(struct file *f, char __user *u, size_t s, loff_t *l)
{
    printk("irq read ---------------\n");
    return 0;
}

static int irq_open(struct inode *p, struct file *f)
{
    printk("irq open ---------------\n");
    return 0;
}


static struct file_operations irq_fops = {
    .owner = THIS_MODULE,
    .open = irq_open,
    .read = irq_read,
};

static int __init irq_init(void)
{
    printk("irq init -----------------\n");
    if (major) {
        devid = MKDEV(major, 0);
        register_chrdev_region(devid, 1,"romanIRQ");
    }   
    else {
        alloc_chrdev_region(&devid, 0,1,"romanIRQ");
        major = MAJOR(devid);
        minor = MINOR(devid);
    }
    /* 2、注册字符设备 */
    cdev_init(&cdev, &irq_fops);
    cdev_add(&cdev, devid, 1);
    /* 3、创建类*/
    class = class_create(THIS_MODULE, "romanIRQ");
    if (IS_ERR(class)) {
        return PTR_ERR(class);
    }
    /* 4、创建设备*/
    struct device *device = device_create(class, NULL,devid, NULL,"romanIRQ");
    if (IS_ERR(device)) {
        return PTR_ERR(device);
    }

    return 0;

}

static void __exit irq_exit(void)
{
    printk("irq exit -----------------\n");
    cdev_del(&cdev);
    unregister_chrdev_region(devid, 1);
    device_destroy(class, devid);
    class_destroy(class);
}

module_init(irq_init);
module_exit(irq_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("roman");

写个Makefile(或者自己编译都可)

obj-m = irq.o
PWD := $(shell pwd)
KDIR := /lib/modules/$(shell uname -r)/build
all:
    make -C $(KDIR) M=$(PWD)
clean:
    rm -rf *.o *.ko *.mod.c *.sysmvers *.c~ *~

make后 生成 irq.ko
或者
gcc -S -o main.s main.c (如果是用户态代码gcc编译)
编译成汇编代码

gcc -c -o main.o main.c
objdump -s -d main.o > main.o.txt
目标文件main.o的反汇编结果输出到文件main.o.txt

以ko为例, 执行 objdump -S irq.ko

结果


objdump

objdump反汇编常用参数

• objdump -d : 将代码段反汇编;
• objdump -S : 将代码段反汇编的同时,将反汇编代码与源代码交替显示,编译时需要使用-g参数,即需要调试信息;
• objdump -C : 将C++符号名逆向解析
• objdump -l : 反汇编代码中插入文件名和行号
• objdump -j section : 仅反汇编指定的section

objdump帮助信息
输出objdump帮助信息:
objdump --help或者 man objdump

你可能感兴趣的:(objdump(Linux)反汇编命令常用指南)