【问题标题】:How to create a file in Linux assembly如何在 Linux 程序集中创建文件
【发布时间】:2015-05-12 11:47:09
【问题描述】:

我有以下代码:

section .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point
    mov ecx, 2      ;read-write perms
    mov ebx, name       ;name of file
    mov eax, 8      ;system call number (sys_creat)
    int 0x80        ;call kernel
    mov eax, 1      ;system call number (sys_exit)
    int 0x80        ;call kernel

section .data
name    db  'C:\\test.txt',0xa  

这意味着要在C盘创建一个文件(test.txt)但是不起作用,这样做的正确方法是什么?

【问题讨论】:

  • int 0x80 是您在 32 位 Linux 上执行系统调用的方式。你是在 Linux 机器上运行它吗?如果是这样,我怀疑c:\test.txt 是一个有效的路径。如果您的目标是 Windows,则必须使用一组不同的 API,而对于 DOS,这将是另一个 API。
  • Linux 的C drive 是什么?
  • 虽然没有 C 驱动器,但反斜杠不是目录分隔符,因此这本身不是问题。更成问题的是文件名应该以 0 结尾而不是换行。确实,如果已修复,上述代码确实可以工作。
  • 嗯,好的,谢谢,我正在在线 linux 测试仪上运行脚本,因为我还没有弄清楚如何在 Windows 上运行汇编程序脚本,我会看看如何做到这一点。谢谢!

标签: linux file assembly nasm


【解决方案1】:

首先,syscall=8 是 sys_creat,而不是 write。

但是找出正在发生的事情的最简单方法是查看程序的 strace 输出。在那里你可以看到系统调用是否成功,如果没有,错误值是多少。 (错误)

不再使用 Afaik creat(2),现在使用第二个参数中带有 O_CREAT 的 Open(2)。

【讨论】:

    猜你喜欢
    • 2018-01-20
    • 2017-03-31
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2015-08-09
    相关资源
    最近更新 更多