[英]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.