linux下的C語言開發(AT T 組合語言)

2021-08-31 12:56:06 字數 1617 閱讀 1481

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at&t格式的組合語言。那什麼是at&t格式的彙編**呢?我們可以寫乙個試試看。

.data message: .string

"hello!\n" length = . - message.text.global _start_start: movl $length, %edx movl $message, %ecx movl $1, %ebx movl $4, %eax int $0x80 movl $0, %ebx movl $1, %eax int $0x80

這是乙個簡單的彙編檔案,我們可以分兩步進行編譯。首先,輸入 as -gstabs -o hello.o hello.s, 接著輸入ld -o hello hello.o即可。為了驗證執行檔案是否正確,可以輸入./hello驗證一下。

在as命令當中,由於我們使用了-gstabs選項,因此在hello執行檔案中是包含除錯資訊的。所以,如果想單步除錯的朋友可以輸入gdb hello進行除錯。

那麼,hello執行檔案反彙編的**又是什麼樣的呢?我們可以輸入objdump -s -d hello檢視一下。

08048074

<_start>:.text.global _start_start:        movl $length, %edx 8048074:       ba 08

0000

00          mov    $0x8,%edx        movl $message, %ecx 8048079:       b9 9c 90

0408          mov    $0x804909c,%ecx        movl $1, %ebx 804807e:       bb 01

0000

00          mov    $0x1,%ebx        movl $4, %eax 8048083:       b8 04

0000

00          mov    $0x4,%eax        int $0x80

8048088:       cd 80

int    $0x80        movl $0, %ebx 804808a:       bb 00

0000

00          mov    $0x0,%ebx        movl $1, %eax 804808f:       b8 01

0000

00          mov    $0x1,%eax        int $0x80

8048094:       cd 80

int    $0x80        ret 8048096:       c3                      ret

給我老師的人工智慧教程打call!

linux下的C語言開發(AT T 組合語言)

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...

linux下的C語言開發 AT T 組合語言

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...

linux下的C語言開發(AT T 組合語言)

同樣是x86的cpu,但是卻可以用不同形式的組合語言來表示。在window上面我們使用的更多是intel格式的組合語言,而在linux系統上面使用的更多的常常是at t格式的組合語言。那什麼是at t格式的彙編 呢?我們可以寫乙個試試看。data message string hello n len...