linux反汇编命令 linux 反汇编调试工具

linux中 gcc 下ld 链接成什么格式的目标文件 , 有生成的哪些文件可以反汇编,反汇编的工具有哪些?elf可执行文件
生成的目标文件(也即.o文件)和elf文件都可以反汇编
反汇编工具就是objdump命令,加个-S的选项就可以了 。例如:
objdump -S hellohello.dump
怎样反汇编bzImage-platinum-ChinaUnix博客具体步骤如下:
#! /bin/sh
set -x
#
# 一般gzip压缩包的magic值为0x8b1f后跟0x0008,或者0x0808 。
# 这里就是要找出这个偏移 。
# 119116,就是这个偏移,这个偏移在不同的bzImage里是不同的,所以,这里需要手动调整一下 。
# 解压后的文件即vmlinux.bin
od -h -A d bzImage | grep --color -m 3 -A 1 -i 8b1f
dd if=bzImage bs=1 skip=11916 | gunzipvmlinux.bin
# 调用我写的一个python脚本,生成gnu linker script 。
./genlds.pyvmlinux.elf.lds
# 构造 ELF 信息,结果文件为vmlinux.elf
ld -m elf_x86_64 --format binary --oformat elf64-x86-64 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf
# 如果是32位系统,可以用以下命令
#ld -m elf_i386 --format binary --oformat elf32-i386 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf
# 删除在上一步生成的多余符号 。
objcopy --strip-symbol _binary_vmlinux_bin_start --strip-symbol _binary_vmlinux_bin_end --strip-symbol _binary_vmlinux_bin_size vmlinux.elf
# 设置 .text section标志,否则objdump -d不能正常工作,只能用objdump -D 。
objcopy --set-section-flag .text=alloc,readonly,code vmlinux.elf
# 以后只是出于验证目的 。
# 以schedule函数作为一个样本,检查在vmlinux.elf文件里是不是包括了正确的偏移 。
grep --color "[tT] schedule$" System.map
readelf -s vmlinux.elf | grep" schedule$" --color
genlds.py内容如下:
#! /usr/bin/python
import sys
#将 形如 fffffff8989 的字符串转换为数字形式 。
def to_no(hexstr):
ret = 0
start = -1
len_hexstr = len(hexstr)
while start=-len_hexstr:
c = hexstr
if c in "0123456789":
n = ord(c) - ord('0')
elif c in "abcdef":
n = ord(c) - ord('a')0xa
elif c in "ABCDEF":
n = ord(c) - ord('A')0xa
ret |= long(n((-start-1)*4))
start -= 1
return ret
# 计算addr-base
def sym_offset(addr, base):
if base == "missing-base":
return "missing-offset"
addr = to_no(addr)
base = to_no(base)
return hex(int(addr-base))
lines = file("System.map").readlines()
result=""
# 求.text的开始地址
base="missing-base"
for line in lines:
line = line.strip()
addr, type, sym = line.split(" ")
if type in "tT":
if sym in ("startup_64", "startup_32"):
base = addr
break
# 生成lds中的符号行 。
for line in lines:
line = line.strip()
addr, type, sym = line.split(" ")
if type in "tT":
offset = sym_offset(addr, base)
result ="\t%s = %s; /* orig: 0x%s */\n" % (sym, offset, addr)
# 生成需要的脚本
template="""
OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
OUTPUT_ARCH(i386:x86-64)
【linux反汇编命令 linux 反汇编调试工具】SECTIONS
{
. = 0x%s;
.text . : {
*(.data)
%s}
}
"""
print template % (base, result)
以下是反汇编的出来部分结果:
ffffffff80466ca0 interruptible_sleep_on:
ffffffff80466ca0: 55 push %rbp
ffffffff80466ca1: 48 ba ff ff ff ff ff mov $0x7fffffffffffffff,%rdx
ffffffff80466ca8: ff ff 7f
ffffffff80466cab: be 01 00 00 00 mov $0x1,%esi
ffffffff80466cb0: 48 89 e5 mov %rsp,%rbp
ffffffff80466cb3: c9 leaveq
ffffffff80466cb4: e9 c7 fe ff ff jmpq ffffffff80466b80 __sched_text_start
ffffffff80466cb9: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
ffffffff80466cc0 schedule:
ffffffff80466cc0: 55 push %rbp
ffffffff80466cc1: 48 c7 c0 80 ef 62 80 mov $0xffffffff8062ef80,%rax
ffffffff80466cc8: 48 c7 c2 00 b4 62 80 mov $0xffffffff8062b400,%rdx
ffffffff80466ccf: 48 89 e5 mov %rsp,%rbp
ffffffff80466cd2: 41 57 push %r15
ffffffff80466cd4: 41 56 push %r14
ffffffff80466cd6: 41 55 push %r13
ffffffff80466cd8: 41 54 push %r12
ffffffff80466cda: 53 push %rbx
ffffffff80466cdb: 48 81 ec 98 00 00 00 sub $0x98,%rsp
ffffffff80466ce2: 48 c7 85 78 ff ff ff movq $0xffffffff8062ef80,-0x88(%rbp)
ffffffff80466ce9: 80 ef 62 80
LINUX下有一般用什么反汇编工具答:linux上很容易反汇编的埃用nasm就可以的 。1、首先读取mbr sudo dd if=/dev/sda of=mbr.bin count=1 dd是linux的命令,需要root权限的,if是输入方法 ,在linux上所有的设备都是文件,mbr在第一块硬盘上,所以if=dev/sda 。of=mbr.bin
Linux下有没有类似于OD的反汇编工具可以试ldasmlinux反汇编命令,不过一般在linux系统linux反汇编命令,命令行下用gdb
图形界面linux反汇编命令的可以试试ddd,其实也是封装linux反汇编命令的gdb
在linux系统中怎么使C程序变成Intel的汇编程序而不是AT&T的,gcc编译后默认的是AT&T的gcc编译的程序码是没有“Intel”、“att”之分的??就是二进制而已 。所谓的“Intel”、“att”是指汇编语言的写作格式 。
如果你用yum软件包管理器linux反汇编命令,sudo yum install nasm 。
如果你用apt-getlinux反汇编命令,sudo apt-get install nasm 。
如果不行linux反汇编命令,就到sourceforge下载nasm的rpm(如果是yum)或deb(apt-get) , 然后安装 。
如果还不行,下载源码,然后终端里(在解压出的目录下)linux反汇编命令:
./configure
make
sudo make install
最后,ndisasm -b 32 文件名 。
顺便一说安装的这个nasm是intel格式的汇编编译器 。相当好 。然后ndisasm是它附带的反汇编器 。
不好意思没法放网址 。百度会把这个回答给删掉 。
star特530的是ARM汇编的 。
关于linux反汇编命令和linux 反汇编调试工具的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读