모두 x86_64 어셈블리에 어려움이 있습니다. file create
. x86에서 파일 만들기가 정상적으로 작동합니다. 0644 octal -rw-r--r--
파일 권한의 8 진수 권한을 가진 파일의 생성 예를 들어, x86에서, 모드 (__NR_creat 8
)에 대한 호출은 0420
결과 :Linux asm x86_64 파일 만들기 (__NR_creat 85), 파일 생성 없음
mov eax, 8 ; system call number (sys_creat)
mov ebx, [fnbuf] ; set ebx to filename
mov ecx, 0420 ; 644 octal -rw-r--r--
int 0x80 ; call kernel
동안 asm-x86/unistd_64.h
85
변경하고 커널 호출 규칙에서 시스템 콜 번호 x86_64에서 (%rdi, %rsi, %rdx, %r10, %r8 and %r9
) x86_64 ABI (A.2.1 Calling Convention)으로 추적하면 x86_64에서 동일하게 작동하는 파일 생성이 필요합니다. 코드 변경하고, 통화가 될 것입니다 :
mov rax, 85 ; __NR_creat x86_64 syscall
mov rdi, [ofname] ; filename in rdi
mov rsi, 0420 ; 644 octal -rw-r--r--
syscall ; call kernel
그러나, 파일이 생성되지 않습니다. x86과 x86_64 사이에 다른 점이 있습니까? 어떤 도움을 주시면 감사하겠습니다. 나는이 문제에서 찾을 수있는 모든 참조를 거쳤으며 x86_64 sys_creat 차이점에 대한 추가 정보를 찾을 수 없습니다. 최소 유효성을 검사 할 수있는 예가 여기에 있습니다 : filecreat_64.asm. nasm
컴파일 및 링크는 다음과 같습니다
nasm -f elf64 -o filecreat_64.o filecreat_64.asm
ld -o filecreat_64 filecreat_64.o
감사합니다. 나는 strace를 제외한 모든 것을 사용했다. 짧은'fopen' 예제를 역 컴파일하기 위해'gdb'를 사용했지만, asm 파일을 실행하지 않았습니다. 나는 x86을 사용했는데 설명 할 수없는 이유 때문에 작동했습니다. 다시 한번 감사드립니다. 내가 몇 시간 동안 봤어야 할 나무 문제에 대한 포레스트 였어. –