用linux汇编语言创建目录

时间:2012-03-19 17:44:16

标签: c linux assembly directory

我正在尝试创建一个小型汇编程序来创建一个文件夹。我查询了系统调用以在this page上创建目录。它说它是在27h之前确定的。我如何在汇编中实现mkdir somename

我知道该程序应该将27移动到eax但我不确定下一步该去哪里。我搜索了相当多的内容,似乎没有人在网上发布过关于此问题的内容。

这是我目前的代码(我不知道把文件名放在哪个寄存器中等等):

section .data

section .text
global _start

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

由于

2 个答案:

答案 0 :(得分:5)

找出的一种方法是使用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.

答案 1 :(得分:0)

您也可以像Assembly Howto建议的那样。但实际上,从Libc调用mkdir更具可移植性。您需要查看asm/unistd.h以获取系统调用号。