gpt4 book ai didi

c - 如何从汇编中调用用 C 编写的代码?

转载 作者:太空狗 更新时间:2023-10-29 15:05:24 26 4
gpt4 key购买 nike

已解决的问题应该使主符号成为全局符号,以便链接器在链接时可以在目标文件中找到它。更正代码。

在执行任务时,尝试从程序集(YASM 汇编程序)中调用简单的 C 函数:

编写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 标签设置为全局标签,否则目标文件将不包含该符号,链接器将无法识别它。

关于c - 如何从汇编中调用用 C 编写的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39435406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com