打开系统调用无法无故创建文件
open syscall failes to create a file without a reason
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
第一部分计划创建一个在 plname 中指定的文件,我第一次尝试将其创建到 /tmp/plname.bin 失败后,尝试至少创建到执行 directory.I'还尝试创建系统调用并得到相同的结果。
programm 在打开系统调用时失败,在执行 int 0x80 指令后,eax 包含 -2,programm 正常结束,但不创建文件。
在这里我有旗帜和模组
https://sourceware.org/gdb/onlinedocs/gdb/mode_005ft-Values.html#mode_005ft-Values
这是 gdb 输出
Dump of assembler code for function _start:
0x08048080 <+0>: mov [=11=]x8,%eax
0x08048085 <+5>: mov [=11=]x80490c9,%ebx
0x0804808a <+10>: mov [=11=]x700,%ecx
0x0804808f <+15>: int [=11=]x80
0x08048091 <+17>: mov [=11=]x4,%eax
0x08048096 <+22>: mov [=11=]x80490e3,%ecx
0x0804809b <+27>: mov [=11=]x100,%edx
0x080480a0 <+32>: int [=11=]x80
0x080480a2 <+34>: xor %eax,%eax
0x080480a4 <+36>: inc %eax
0x080480a5 <+37>: xor %ebx,%ebx
0x080480a7 <+39>: int [=11=]x80
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
您使用了错误的参考手册。您链接到的是 gdb 协议中使用的标志,而不是系统调用使用的标志。
O_CREAT
is actually 0100
octal,所以你应该mov ecx,0102o
。
另请注意,对于 sys_write
.
,您忘记将返回的文件描述符从 eax
移动到 ebx
工作代码:
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
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
第一部分计划创建一个在 plname 中指定的文件,我第一次尝试将其创建到 /tmp/plname.bin 失败后,尝试至少创建到执行 directory.I'还尝试创建系统调用并得到相同的结果。
programm 在打开系统调用时失败,在执行 int 0x80 指令后,eax 包含 -2,programm 正常结束,但不创建文件。 在这里我有旗帜和模组 https://sourceware.org/gdb/onlinedocs/gdb/mode_005ft-Values.html#mode_005ft-Values
这是 gdb 输出
Dump of assembler code for function _start:
0x08048080 <+0>: mov [=11=]x8,%eax
0x08048085 <+5>: mov [=11=]x80490c9,%ebx
0x0804808a <+10>: mov [=11=]x700,%ecx
0x0804808f <+15>: int [=11=]x80
0x08048091 <+17>: mov [=11=]x4,%eax
0x08048096 <+22>: mov [=11=]x80490e3,%ecx
0x0804809b <+27>: mov [=11=]x100,%edx
0x080480a0 <+32>: int [=11=]x80
0x080480a2 <+34>: xor %eax,%eax
0x080480a4 <+36>: inc %eax
0x080480a5 <+37>: xor %ebx,%ebx
0x080480a7 <+39>: int [=11=]x80
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
您使用了错误的参考手册。您链接到的是 gdb 协议中使用的标志,而不是系统调用使用的标志。
O_CREAT
is actually 0100
octal,所以你应该mov ecx,0102o
。
另请注意,对于 sys_write
.
eax
移动到 ebx
工作代码:
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