和反匯編其他程序一樣,用 objdump 或其他你喜歡的反匯編工具都可以的

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到南芬網(wǎng)站設(shè)計(jì)與南芬網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋南芬地區(qū)。
答:linux上很容易反匯編的埃用nasm就可以的。 1、首先讀取mbr sudo dd if=/dev/sda of=mbr.bin count=1 dd是linux的命令,需要root權(quán)限的,if是輸入方法 ,在linux上所有的設(shè)備都是文件 ,mbr在第一塊硬盤上,所以if=dev/sda。of=mbr.bin
elf可執(zhí)行文件
生成的目標(biāo)文件(也即.o文件)和elf文件都可以反匯編
反匯編工具就是objdump命令,加個(gè)-S的選項(xiàng)就可以了。例如:
objdump -S hello hello.dump
具體步驟如下:
#! /bin/sh
set -x
#
# 一般gzip壓縮包的magic值為0x8b1f后跟0x0008,或者0x0808。
# 這里就是要找出這個(gè)偏移。
# 119116,就是這個(gè)偏移,這個(gè)偏移在不同的bzImage里是不同的,所以,這里需要手動(dòng)調(diào)整一下。
# 解壓后的文件即vmlinux.bin
od -h -A d bzImage | grep --color -m 3 -A 1 -i 8b1f
dd if=bzImage bs=1 skip=11916 | gunzip vmlinux.bin
# 調(diào)用我寫的一個(gè)python腳本,生成gnu linker script。
./genlds.py vmlinux.elf.lds
# 構(gòu)造 ELF 信息,結(jié)果文件為vmlinux.elf
ld -m elf_x86_64 --format binary --oformat elf64-x86-64 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf
# 如果是32位系統(tǒng),可以用以下命令
#ld -m elf_i386 --format binary --oformat elf32-i386 -T vmlinux.elf.lds vmlinux.bin -o vmlinux.elf
# 刪除在上一步生成的多余符號(hào)。
objcopy --strip-symbol _binary_vmlinux_bin_start --strip-symbol _binary_vmlinux_bin_end --strip-symbol _binary_vmlinux_bin_size vmlinux.elf
# 設(shè)置 .text section標(biāo)志,否則objdump -d不能正常工作,只能用objdump -D。
objcopy --set-section-flag .text=alloc,readonly,code vmlinux.elf
# 以后只是出于驗(yàn)證目的。
# 以schedule函數(shù)作為一個(gè)樣本,檢查在vmlinux.elf文件里是不是包括了正確的偏移。
grep --color "[tT] schedule$" System.map
readelf -s vmlinux.elf | grep " schedule$" --color
genlds.py內(nèi)容如下:
#! /usr/bin/python
import sys
#將 形如 fffffff8989 的字符串轉(zhuǎn)換為數(shù)字形式。
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
# 計(jì)算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的開(kāi)始地址
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中的符號(hào)行。
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,不開(kāi)源嗎?linux都是開(kāi)放源碼的,你修改過(guò)后,重新編譯一下內(nèi)核,就可以了,不需要反編譯的
網(wǎng)頁(yè)題目:linux中反匯編命令,匯編語(yǔ)言的取反指令
網(wǎng)址分享:http://chinadenli.net/article19/dsegjgh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、自適應(yīng)網(wǎng)站、網(wǎng)站排名、企業(yè)建站、網(wǎng)站維護(hù)、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)