繁体   English   中英

用Linux汇编语言创建目录

[英]Creating a directory in linux assembly language

我正在尝试创建一个小的汇编程序来创建一个文件夹。 我在此页面上查找了用于创建目录的系统调用。 它说到27h被识别。 我将如何在程序mkdir somename实现mkdir somename

我知道该程序应该将27转换为eax,但是我不确定下一步该怎么做。 我在Google上搜索了很多,似乎没有人在网上发布过有关此内容的内容。

这是我当前的代码(我不知道在哪个寄存器中放置文件名,依此类推):

section .data

section .text
global _start

mov eax, 27
mov ????????
....
int 80h

谢谢

一种发现的方法是使用GCC转换以下C代码:

#include <stdio.h>
#include <sys/stat.h>

int main()
{
    if (mkdir("testdir", 0777) != 0)
    {
        return -1;
    }

    return 0;
}

要组装,请使用: gcc mkdir.c -S

    .file   "mkdir.c"
    .section    .rodata
.LC0:
    .string "testdir"
    .text
.globl main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    subl    $16, %esp
    movl    $511, 4(%esp)
    movl    $.LC0, (%esp)
    call    mkdir           ; interesting call
    testl   %eax, %eax
    setne   %al
    testb   %al, %al
    je  .L2
    movl    $-1, %eax
    jmp .L3
.L2:
    movl    $0, %eax
.L3:
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (GNU) 4.5.1 20100924 (Red Hat 4.5.1-4)"
    .section    .note.GNU-stack,"",@progbits

无论如何, ProgrammingGroundUp页面272列出了重要的系统调用,包括mkdir

%eax   Name    %ebx                 %ecx       %edx    Notes
------------------------------------------------------------------
39     mkdir   NULL terminated    Permission           Creates the given
               directory name                          directory. Assumes all 
                                                       directories leading up 
                                                       to it already exist.

您也可以按照大会指导手册的建议进行操作。 但是确实,从Libc调用mkdir更方便。 您需要查看asm/unistd.h以获得系统调用号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM