文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
2. 调用 C 函数
用 C 和 NASM 混合编程。
调用 C 函数
; main.s global main section .text main: push rbp mov rbp, rsp extern add mov rdi, 11 mov rsi, 22 call add extern printhex mov rdi, rax call printhex extern exit mov rdi, 0 call exit mov rsp, rbp pop rbp ret
// lib.c #include <stdio.h> long add(long x, long y) { return x + y; } void printhex(long x) { printf("%lx\n", x); }
$ nasm -g -F dwarf -f elf64 -o main.o main.s $ gcc -gdwarf -O0 -c -o lib.o lib.c $ gcc -no-pie -o test main.o lib.o $ ./test 21
调用 ASM 函数
// main.c #include <stdio.h> extern long add(long, long); int main(int argc, char *argv[]) { printf("%lx\n", add(11l, 22l)); return 0; }
; add.s global add section .text add: ; long add(long x, long y) push rbp mov rbp, rsp mov rax, rdi ; arg.x add rax, rsi ; + arg.y mov rsp, rbp pop rbp ret
$ nasm -g -F dwarf -f elf64 -o add.o add.s $ gcc -gdwarf -O0 -c -o main.o main.c $ gcc -no-pie -o test main.o add.o $ ./test 21
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论