将2个目标文件链接在一起

时间:2017-12-23 21:13:49

标签: linux assembly x86-64

我对汇编编程非常陌生,现在我正在尝试编写一个由2个与Manual链接在一起的目标文件组成的程序。

1.asm

Automated

2.asm

Test Results

现在我按照以下方式编译和链接它们

ld

之后,当我运行二进制section .text global _start extern _print_func _start: call _print_func ; does not print anything. Why? call _print ; prints Some string mov rax, 60 syscall _print: mov rax, 0x01 mov rdi, 0x01 mov rsi, str mov rdx, [str_len] syscall ret section .data str: db 'Some string',0x0A,0x0D str_len: db $ - str 时,section .text global _print_func _print_func: mov rax, 0x01 mov rdi, 0x01 mov rsi, str2 mov rdx, [str_len2] sycall ret section .rodata str2: db 'Some string',0x0A,0x0D str_len2: db $ - str2 成功打印字符串,而从另一个模块链接的nasm -f elf64 1.asm nasm -f elf64 2.asm ld -o bin 1.o 2.o 不打印任何内容。为什么?该特定代码有什么问题?

我修复了./bin中的拼写错误,现在2.asm看起来如下:

call _print

我还评论call _print_func

sycall

现在,在编译和链接后,它只会打印任何内容。

0 个答案:

没有答案