[英]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.