同樣是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 00 00 00 mov $0x8,%edx
movl $message, %ecx
8048079: b9 9c 90 04 08 mov $0x804909c,%ecx
movl $1, %ebx
804807e: bb 01 00 00 00 mov $0x1,%ebx
movl $4, %eax
8048083: b8 04 00 00 00 mov $0x4,%eax
int $0x80
8048088: cd 80 int $0x80
movl $0, %ebx
804808a: bb 00 00 00 00 mov $0x0,%ebx
movl $1, %eax
804808f: b8 01 00 00 00 mov $0x1,%eax
int $0x80
8048094: cd 80 int $0x80
ret8048096: c3 ret
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 ...