在趙炯的《linux核心完全剖析》中有乙個在c程式中呼叫彙編函式的介紹
執行as -o callee.o callee.s的時候遇到錯誤 「callee.s:7: error: invalid instruction suffix for `push'」, 參考文章 : (感謝作者)。在callee.s中加入 .code32
執行完gcc -o caller caller.c callee.o後,執行./caller就報段錯誤(segmentation fault (core dumped))。
嘗試用gdb除錯了一下,沒有指明具體位置,只報出函式名。
把caller.c編譯成caller.s,看了下源**,發現用的是rbp(64位),而callee.s用的是ebp(32位)
參考網上的說法,應該在編譯的時候加上 -m32 以生成32位**
先嘗試生成32位的編譯程式:gcc -s -m32 -o caller.s caller.c
in file included from /usr/include/stdio.h:27:0,
from caller.c:1:
/usr/include/features.h:367:25: fatal error: sys/cdefs.h: no such file or directory
compilation terminated.
網上查了下是缺少32位相容包
執行:gcc -m32 -o caller caller.c callee.s (會有警告)
執行:./caller
看到結果了。。
c程式呼叫彙編函式
c程式呼叫彙編函式 程式例項 按鍵控制led燈 main.c static int printf const char format,int const char format,0xc3e11ad0 void start led key.s define gpm4con 0x110002e0 def...
c呼叫彙編函式 1
guang guang laptop temp h ls hello hello.o hello.s main.c main.o hello.s.global hello hello movl 4,eax movl 1,ebx movl hello,ecx movl 30,edx int 0x80 ...
visual studio中C語言呼叫彙編
在visual studio的c語言開發中,呼叫彙編有幾點需要注意的地方 首先要區別masm和masm32,masm是已經整合在visual studio中的彙編器,即彙編使用的ml.exe,可直接使用對已有的彙編 進行彙編。masm32是一套彙編的sdk,其安裝和配置方法在sabalol的博文 中...