的一種方法,是使用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.
先在C中編寫一個簡單的mkdir示例,然後對其進行測試,然後反彙編(gcc -S)。這種技術適用於許多關於彙編編程的「如何」問題。 – 2012-03-19 17:47:13
我使用NASM的方式。 我嘗試過,但是當我拆解它時,並不會爲示例調用中斷。 – 2012-03-19 17:49:39
這可能是真的,但是你有沒有直接使用系統調用中斷的原因,而不是僅僅調用'mkdir'? – 2012-03-19 17:51:11