導航:首頁 > 編程系統 > linux反匯編命令

linux反匯編命令

發布時間:2023-11-05 14:49:51

A. linux 下面怎麼用gdb調試多個.c文件

Linux 下調試匯編代碼既可以用 GDB、DDD 這類通用的調試器,也可以使用專門用來調試匯編代碼的 ALD(Assembly Language Debugger)。
從調試的角度來看,使用 GAS 的好處是可以在生成的目標代碼中包含符號表(symbol table),這樣就可以使用 GDB 和 DDD 來進行源碼級的調試了。要在生成的可執行程序中包含符號表,可以採用下面的方式進行編譯和鏈接:

[xiaowp@gary code]$ as --gstabs -o hello.o hello.s
[xiaowp@gary code]$ ld -o hello hello.o

執行 as 命令時帶上參數 --gstabs 可以告訴匯編器在生成的目標代碼中加上符號表,同時需要注意的是,在用 ld 命令進行鏈接時不要加上 -s 參數,否則目標代碼中的符號表在鏈接時將被刪去。
匯編程序員通常面對的都是一些比較苛刻的軟硬體環境,短小精悍的ALD可能更能符合實際的需要,因此下面主要介紹一下如何用ALD來調試匯編程序。首先在命令行方式下執行ald命令來啟動調試器,該命令的參數是將要被調試的可執行程序:

[xiaowp@gary doc]$ ald hello
Assembly Language Debugger 0.1.3Copyright (C) 2000-2002 Patrick Alken
hell ELF Intel 80386 (32 bit), LSB, Executable, Version 1 (current)
Loading debugging symbols...(15 symbols loaded)
ald>

當 ALD 的提示符出現之後,用 disassemble 命令對代碼段進行反匯編:

ald> disassemble -s .text
Disassembling section .text (0x08048074 - 0x08048096)
08048074 BA0F000000 mov edx, 0xf
08048079 B998900408 mov ecx, 0x8049098
0804807E BB01000000 mov ebx, 0x1
08048083 B804000000 mov eax, 0x4
08048088 CD80 int 0x80
0804808A BB00000000 mov ebx, 0x0
0804808F B801000000 mov eax, 0x1
08048094 CD80 int 0x80

上述輸出信息的第一列是指令對應的地址碼,利用它可以設置在程序執行時的斷點:

ald> break 0x08048088
Breakpoint 1 set for 0x08048088

斷點設置好後,使用 run 命令開始執行程序。ALD 在遇到斷點時將自動暫停程序的運行,同時會顯示所有寄存器的當前值:

ald> run
Starting program: hello
Breakpoint 1 encountered at 0x08048088
eax = 0x00000004 ebx = 0x00000001 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x08048088 eflags = 0x00000246
Flags: PF ZF IF
08048088 CD80 int 0x80

如果需要對匯編代碼進行單步調試,可以使用 next 命令:

ald> next
Hello, world!
eax = 0x0000000F ebx = 0x00000000 ecx = 0x08049098 edx = 0x0000000Fesp = 0xBFFFF6C0 ebp = 0x00000000 esi = 0x00000000 edi = 0x00000000
ds = 0x0000002B es = 0x0000002B fs = 0x00000000 gs = 0x00000000
ss = 0x0000002B cs = 0x00000023 eip = 0x0804808F eflags = 0x00000346
Flags: PF ZF TF IF
0804808F B801000000 mov eax, 0x1

若想獲得 ALD 支持的所有調試命令的詳細列表,可以使用 help 命令:

ald> help
Commands may be abbreviated.
If a blank command is entered, the last command is repeated.
Type `help <command>'' for more specific information on <command>.
General commands
attach clear continue detach disassemble
enter examine file help load
next quit register run set
step unload window write
Breakpoint related commands
break delete disable enable ignore
lbreak tbreak

B. 請教:linux終端顯示內容不全,長的字元串被截斷

管道
管道簡單理解就是,使用管道意味著第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。利用Linux所提供的管道符「|」將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。

這樣在ls命令的時候如果現實的內容很多,可以利用管道技術將其分頁顯示:
1. ls | less
2. ls | more
我這里是遇到objm -d反匯編命令時,終端顯示不全。參照上面的ls命令,可以在命令後邊加上「 | more 」

如果對less和more掌握不熟練的話,使用man命令查一下他們的詳細用法和區別。

C. linux下的so文件如何分析

使用objmp反匯編,用readelf 查看文件結構, 這兩個工具在軟體包 binutils中.
安裝 binutils:
fedora,redhat: yum install binutils
ubuntu,Mint等: apt-get install binutils
Archlinux: pacman -S binutils

用版Intel格式匯編輸出反權匯編指令: objmp -d -M intel xxxx.so

D. linux中 gcc 下ld 鏈接成什麼格式的目標文件,有生成的哪些文件可以反匯編,反匯編的工具有哪些

elf可執行文件
生成的目標文件(也即.o文件)和elf文件都可以反匯編
反匯編工具就是objmp命令,加個-S的選項就可以了。例如:
objmp -S hello > hello.mp

E. 在linux系統中怎麼使C程序變成Intel的匯編程序而不是AT&T的,gcc編譯後默認的是AT&T的

gcc編譯的程序碼是沒有「Intel」、「at&t」之分的⋯⋯就是二進制而已。所謂的「Intel」、「at&t」是指匯版編語言的寫作格式權。
如果你用yum軟體包管理器,sudo yum install nasm。
如果你用apt-get,sudo apt-get install nasm。
如果不行,就到sourceforge下載nasm的rpm(如果是yum)或deb(apt-get),然後安裝。
如果還不行,下載源碼,然後終端里(在解壓出的目錄下):
./configure
make
sudo make install
最後,ndisasm -b 32 文件名。
順便一說安裝的這個nasm是intel格式的匯編編譯器。相當好。然後ndisasm是它附帶的反匯編器。
不好意思沒法放網址。網路會把這個回答給刪掉。
star特530的是ARM匯編的。

F. 怎樣反匯編bzImage

具體步驟如下:
#! /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 | gunzip > vmlinux.bin
# 調用我寫的一個python腳本,生成gnu linker script。
./genlds.py > vmlinux.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
# 刪除在上一步生成的多餘符號。
obj --strip-symbol _binary_vmlinux_bin_start --strip-symbol _binary_vmlinux_bin_end --strip-symbol _binary_vmlinux_bin_size vmlinux.elf
# 設置 .text section標志,否則objmp -d不能正常工作,只能用objmp -D。
obj --set-section-flag .text=alloc,readonly,code vmlinux.elf
# 以後只是出於驗證目的。
# 以schele函數作為一個樣本,檢查在vmlinux.elf文件里是不是包括了正確的偏移。
grep --color "[tT] schele$" System.map
readelf -s vmlinux.elf | grep " schele$" --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[start]
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)

G. arm-linux-objmp -D -m arm led_elf > led.dis 是什麼意思

'-m' 後面跟的是cpu構架 arm就表示是arm構架的cpu
'>' 表示將這個程序的反匯編程序寫入到led.dis這個文件中,在終端中不顯示出來.
當你打開led.dis這個文件時就會看到上面命令的輸出的反匯編程序了
你也可以 不要 > led.dis 這個直接寫成:
arm-linux-objmp -D -m arm led_elf
這樣你就會在終端上看到命令的輸出led_elf 的反匯編程序

閱讀全文

與linux反匯編命令相關的資料

熱點內容
qq怎麼查看別人的收藏 瀏覽:135
地震三參數matlab程序 瀏覽:57
怎樣給優盤文件加密軟體 瀏覽:7
收拾文件有哪些小妙招 瀏覽:431
pdf文件去底網 瀏覽:253
win10重裝系統需要格式化c盤嗎 瀏覽:424
路由器trx文件 瀏覽:655
淘寶店鋪數據包怎麼做 瀏覽:195
win10鍵盤黏連 瀏覽:332
json如何生成表格 瀏覽:323
怎麼修復sql資料庫表 瀏覽:40
微信微博差別 瀏覽:163
簽到積分換禮品app 瀏覽:812
mfc最近打開文件 瀏覽:672
app埋點平台都有哪些app 瀏覽:314
瑞斯康達網路管理界面 瀏覽:254
ca證書管理器linux 瀏覽:358
蘋果id安全提示問題3個字元 瀏覽:949
iphone上好的拍照軟體 瀏覽:579
word內嵌文件怎麼下載 瀏覽:864

友情鏈接