我对汇编编程非常陌生,现在我正在尝试编写一个由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
现在,在编译和链接后,它只会打印任何内容。