Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.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 使用汇编执行系统命令(bash)?_Linux_Assembly_Nasm - Fatal编程技术网

Linux 使用汇编执行系统命令(bash)?

Linux 使用汇编执行系统命令(bash)?,linux,assembly,nasm,Linux,Assembly,Nasm,基本上,我尝试使用汇编执行命令/bin/ls,但不幸的是,我失败了: SECTION .data buf: db "Hello", 5 SECTION .text global _start _start: xor eax, eax mov edx, eax push edx mov eax, 0x736c2f2f ; "sl/" push eax mov eax, 0x6e69622f ; "nib/" push

基本上,我尝试使用汇编执行命令
/bin/ls
,但不幸的是,我失败了:

SECTION .data
    buf: db "Hello", 5
SECTION .text
global _start

_start:
    xor eax, eax
    mov edx, eax
    push edx
    mov eax, 0x736c2f2f     ; "sl/"
    push eax
    mov eax, 0x6e69622f     ; "nib/"
    push eax
    mov ebx, esp
    push edx
    mov eax, 0x2f
    push eax
    mov ecx, esp
    mov eax, 11
    xor edx, edx
    int 0x80

    mov eax, 1
    int 0x80
但是如果我将
mov-eax,11
更改为
mov-eax,4
并在
xor-edx,edx之后添加
mov-edx,7
。它可以打印
/bin/ls

有人能指出我犯的错误吗?
nasm-g-f elf-f dwarf./shell.asm&&ld-m elf_i386-o shell.o编译代码,我的arc是
Linux kali 5.2.0-kali2-amd64#1 SMP Debian 5.2.9-2kali1(2019-08-22)x86_64 GNU/Linux
发现了问题,正如@Jestor所指出的(谢谢),我需要将正在执行的文件存储在
ebx
和所有参数,包括
ecx
中的文件名,并将
edx
设置为null,如下所示:

SECTION .data
buf: db "./", 0
SECTION .text
global _start

_start:
xor eax, eax
xor edx, edx
push eax
push long 0x736c2f2f    ; "sl/"
push long 0x6e69622f    ; "nib/"
mov ebx, esp
push eax
push byte 0x2f
mov esi, esp

push eax
push esi
push ebx
mov ecx, esp
mov eax, 0x0b
int 0x80

mov eax, 1
int 0x80
在我的工作shell之后,
ecx
如下所示:

(gdb) x/50x $ecx
0xffffd370:     0xffffd384      0xffffd37c      0x00000000      0x0000002f
0xffffd380:     0x00000000      0x6e69622f      0x736c2f2f      0x00000000

filename参数进入
ebx
而不是
ecx
。使用
strace
查看您在做什么。@jester,更新了我的脚本,现在应该是这样吗?仍然不起作用