C语言与汇编的结合
书上的第三天,真的干了太多的事情了,而且这哥们总是用自己的工具,还是在Windows平台,让我们mac下的用户实在是够呛,书上的目标其实就是把c语言和汇编结合在一起,也就是说,C语言可以调用汇编的代码,c语言去定义函数,实际实现由汇编来实现。
- 引入i386-elf-binutils i386-elf-gcc两个工具,新版的macos 的brew已经弃用了,Google一下加一个源就行。
- objconv工具反编译,brew也已经支持了。
- c代码这么写
extern void foo_print(char* p, int len);
int main() {
foo_print("Hello from asm\n", 16);
return 0;
}
- 汇编代码这么写
[section .data]
[section .text]
global foo_print
foo_print:
mov edx, [esp + 8]
mov ecx, [esp + 4]
mov ebx, 1
mov eax, 4
int 0x80
ret
- Build方法:
nasm -f elf32 -o function.o function.asm
i386-elf-gcc -m32 -fno-asynchronous-unwind-tables -s -c -o main.o main.c
i386-elf-ld -m elf_i386 main.o function.o -o main
objconv -fnasm main -o main.asm
- Mac下不能测试main,开一个docker测试一下,输出了,但是有一个crash,不想管了。先这样吧。