① 在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匯編的。
② linux中 gcc 下ld 鏈接成什麼格式的目標文件,有生成的哪些文件可以反匯編,反匯編的工具有哪些
elf可執行文件
生成的目標文件(也即.o文件)和elf文件都可以反匯編
反匯編工具就是objmp命令,加個-S的選項就可以了。例如:
objmp -S hello > hello.mp
③ 如何在linux下把.so文件反匯編
這個一般沒有要求。一般/lib /usr/lib 其它的要看具體情況。。。 如果你是自己編譯的應用程序,.so文件一般就在安裝目錄下的lib目錄中。
④ 深入理解Linux之計算機是怎樣工作的
本周實驗主要是反匯編C代碼,生成匯編程序。馮·諾依曼理論的要點是:數字計算機的數制採用二進制,計算機應該按照程序順序執行。人們把馮·諾依曼的這個理論稱為馮·諾依曼體系結構。CPU通過匯流排從內存中讀取一條條程序,根據程序的內容執行具體的步驟。CPU在讀取指令時,通過寄存器IP來指向下一條指令(如果是32位系統,則為EIP),CPU的寄存器分為通用寄存器、段寄存器、狀態寄存器。可以用一張圖來說明
進程是一個可執行程序的實例。從內核角度看,進程由用戶內存空間和一系列內核數據結構組成,其中用戶內存空間包含了程序代碼及代碼使用的變數,而內核數據結構用於維護進程狀態信息。每個進程分配的內存由很多部分組成。當計算機在運行時,先從內存中取出第一條指令,通過控制器的解碼,按指令的要求,從存儲器中取出數據進行指定的運算和邏輯操作等加工,然後再按地址把結果送到內存中去。接下來,再取出第二條指令,在控制器的指揮下完成規定操作。依此進行下去。直至遇到停止指令。
計算機的定址方式老師介紹了以下幾種:
movl%eax,%edxedx=eax 寄存器定址
movl$0x123,%edxedx=0x123 立即定址
movl0x123,%edxedx=*(int32_t*)0x123直接定址
movl(%ebx),%edxedx=*(int32_t*)ebx間接定址
movl4(%ebx),%edxedx=*(int32_t*)(ebx+4)變址定址
⑤ 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