在C程式中呼叫彙編函式

2021-08-01 06:54:30 字數 785 閱讀 6799

在趙炯的《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的博文 中...