C指针原理(4)-ATT汇编
生活随笔
收集整理的這篇文章主要介紹了
C指针原理(4)-ATT汇编
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們先用匯編編寫一個helloworld,注意我們直接在匯編代碼中調用C語言的printf函數將"hello,world\n" 輸出在屏幕上。
.section .dataoutput:.asciz "hello,world\n" .section .text.global mainmain:push $outputcall printfaddl $4,%esppush $0call exit上述代碼中,
push $output將參數入棧,以便printf調用,
然后調用printf,printf會在棧中取出它需要的參數
2)我們直接使用GCC編譯后運行
deepfuture@ubu-s:~$ gcc -o test test.s
deepfuture@ubu-s:~$ ./test
hello,world
3)那么調用C庫函數所需要的參數入棧的順序是什么?
再看一個例子
.section .datamyvalue:.byte 67,68,69,70,0mygs:.asciz "%s\n".section .text .globl mainmain:movl $myvalue,%ecxpush %ecxpush $mygs call printfpush $0call exit67,68,69,70是C、D、E、F的ASCII碼,0是字符串終結符
這段代碼的功能是輸出“CEDF”,相當于下面的C代碼
其中,后面的0表示字符串的終結符。
第一個參數最后一個入棧,按調用的相反順序入棧
總結
以上是生活随笔為你收集整理的C指针原理(4)-ATT汇编的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TenSorFlow随笔-除法
- 下一篇: java多线程论文_Java5 多线程之