Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux open syscall创建文件失败,没有原因_Linux_File_Assembly_Nasm_System Calls - Fatal编程技术网

Linux open syscall创建文件失败,没有原因

Linux open syscall创建文件失败,没有原因,linux,file,assembly,nasm,system-calls,Linux,File,Assembly,Nasm,System Calls,第一部分计划创建一个在plname中指定的文件,第一次尝试将其创建到/tmp/plname.bin中,失败后,尝试至少创建到excuting目录中。我还尝试创建syscall,得到了相同的结果 程序在打开系统调用时失败,执行int 0x80指令后,eax包含-2,程序正常结束,但不创建文件。 这里有旗帜和MOD 这是gdb输出 section .text global _start ;must be declared for linker (ld) _start: mov eax,

第一部分计划创建一个在plname中指定的文件,第一次尝试将其创建到/tmp/plname.bin中,失败后,尝试至少创建到excuting目录中。我还尝试创建syscall,得到了相同的结果

程序在打开系统调用时失败,执行int 0x80指令后,eax包含-2,程序正常结束,但不创建文件。 这里有旗帜和MOD

这是gdb输出

section .text
global _start   ;must be declared for linker (ld)
_start:
    mov eax,5
    mov ebx,plname
    mov ecx,0x202
    mov edx,0700o
    int 0x80

    mov eax,4
    mov ecx,plaintext
    mov edx,256
    int 0x80

    xor eax,eax
    inc eax
    xor ebx,ebx
    int 0x80


section .data
key db '123456passwordqwerty',0x0
keylen equ $ - key     ;length of our dear string
plname  db 'plname.bin',0x0
plaintext times 256 db 1
start函数的汇编程序代码转储:
0x0804800:mov$0x8,%eax
0x08048085:mov$0x80490c9,%ebx
0x080408A:mov$0x700,%ecx
0x0804808f:int$0x80
0x08048091:mov$0x4,%eax
0x08048096:mov$0x80490e3,%ecx
0x0804809b:mov$0x100,%edx
0x080480a0:int$0x80
0x080480a2:xor%eax,%eax
0x080480a4:inc%eax
0x080480a5:xor%ebx,%ebx
0x080480a7:int$0x80
汇编程序转储结束。
断点1,0x0804808f在_start()中
(gdb)i r eax
eax 0x5
(gdb)stepi
0x08048094英寸\u开始()
(gdb)i r eax
eax 0x5
(gdb)i r eax ebx ecx edx esi edi
eax 0x5
ebx 0x80490d1 134516945
ecx 0x202 514
edx 0x1c0 448
esi 0x0 0
电子数据交换0x0
(gdb)stepi
0x08048096英寸\u开始()
(gdb)i r eax ebx ecx edx esi edi
eax 0xFFFFFE-2
ebx 0x80490d1 134516945
ecx 0x202 514
edx 0x1c0 448
esi 0x0 0
电子数据交换0x0

您使用了错误的参考手册。您链接到的是gdb协议中使用的标志,而不是系统调用使用的标志

,所以您应该执行
mov ecx,0102o

还请注意,您忘记将
sys\u write
的返回文件描述符从
eax
移动到
ebx

工作代码:

Dump of assembler code for function _start:
0x08048080 <+0>:    mov    $0x8,%eax
0x08048085 <+5>:    mov    $0x80490c9,%ebx
0x0804808a <+10>:   mov    $0x700,%ecx
0x0804808f <+15>:   int    $0x80
0x08048091 <+17>:   mov    $0x4,%eax
0x08048096 <+22>:   mov    $0x80490e3,%ecx
0x0804809b <+27>:   mov    $0x100,%edx
0x080480a0 <+32>:   int    $0x80
0x080480a2 <+34>:   xor    %eax,%eax
0x080480a4 <+36>:   inc    %eax
0x080480a5 <+37>:   xor    %ebx,%ebx
0x080480a7 <+39>:   int    $0x80
End of assembler dump.

Breakpoint 1, 0x0804808f in _start ()
(gdb) i r eax
eax            0x5  5
(gdb) stepi
0x08048094 in _start () 
(gdb) i r eax
eax            0x5  5
(gdb) i r eax ebx ecx edx esi edi
eax            0x5  5
ebx            0x80490d1    134516945
ecx            0x202    514
edx            0x1c0    448
esi            0x0  0
edi            0x0  0 
(gdb) stepi
0x08048096 in _start ()
(gdb) i r eax ebx ecx edx esi edi
eax            0xfffffffe   -2
ebx            0x80490d1    134516945
ecx            0x202    514
edx            0x1c0    448
esi            0x0  0
edi            0x0  0

(不禁止检查系统调用的结果)
section .text
global _start   ;must be declared for linker (ld)
_start:
    mov eax,5
    mov ebx,plname
    mov ecx,0102o
    mov edx,0700o
    int 0x80

    mov ebx, eax
    mov eax,4
    mov ecx,plaintext
    mov edx,256
    int 0x80

    xor eax,eax
    inc eax
    xor ebx,ebx
    int 0x80


section .data
key db '123456passwordqwerty',0x0
keylen equ $ - key     ;length of our dear string
plname  db 'plname.bin',0x0
plaintext times 256 db 1