St.*_*rio 3 linux assembly x86-64 nasm
我正在尝试使用sys_open
系统调用,我获取文件描述符以供阅读.这是我的计划:
SYS_exit equ 0x3C
SYS_open equ 0x02
O_RDONLY equ 0x00
O_WRONLY equ 0x01
O_RDWR equ 0x02
section .text
global _start
_start:
mov eax, SYS_open
mov rdi, file_name
mov rsi, O_RDONLY
mov rdx, 0x00
syscall
mov eax, SYS_exit
mov rdi, 0x00
syscall
section .data
file_name: db '/path/to/test\0'
Run Code Online (Sandbox Code Playgroud)
所以当我跑步时strace ./bin
我得到了输出:
open("/path/to/test\\0", O_RDONLY) = -1 ENOENT (No such file or directory)
exit(0)
Run Code Online (Sandbox Code Playgroud)
删除null-terminal后似乎工作正常:
open("/path/to/test", O_RDONLY) = 3
exit(0) = ?
Run Code Online (Sandbox Code Playgroud)
我很好奇汇编程序如何知道我的字符串的长度.二进制文件中数据部分的内容如下:
Contents of section .data:
6000d8 2f706174 682f746f 2f746573 74 /path/to/test
Run Code Online (Sandbox Code Playgroud)
我期望读取字符串直到达到空终止符.它是如何工作的?
问题在于您定义以下数据的方式:
section .data
file_name: db '/path/to/test\0'
Run Code Online (Sandbox Code Playgroud)
尾随NUL
字符丢失,由于\0
里面的字符串对应于该字符\
和0
,应该代替定义为:
section .data
file_name: db '/path/to/test', 0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
122 次 |
最近记录: |