簡體   English   中英

如何從匯編中調用C編寫的代碼?

[英]how to call code written in C from assembly?

已解決的問題應使主符號全局化,以便鏈接器在鏈接時可以在目標文件中找到它。 更正了代碼。

在執行任務時,嘗試從程序集中調用簡單的C函數(YASM匯編程序):

寫了C函數:

#include <stdio.h>

void
func_in_c(char *s)
{
        printf("%s", s);
}

寫了調用匯編代碼:

        segment .data
str_t_c db "Wow", 0

        segment .text
        global  main ; That is the solution - let linker find global symbol
        extern printf
        extern func_in_c
main:
        push rbp
        mov rbp, rsp
        lea rdi, [str_to_c]
        call func_in_c
        leave
        ret

匯編匯編:

yasm -f elf64 -m amd64 -g dwarf2 main.asm

編譯c代碼:

gcc -o main_c.o -c main_c.c

試圖將兩個目標文件鏈接到單個可執行二進制文件:

gcc -o main main_c.o main.o

拿到:

...
In function _start:
(.text+0x20): undefined reference to main
...

您對如何更正命令/代碼以構建可執行文件有什么建議嗎? 是的,我讀過類似的問題(使用NASM匯編程序,但沒有解決方案可行)。

您需要首先將main標簽設置為全局,否則,目標文件將不包含該符號,並且鏈接器將無法識別它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM