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
Assembly 为什么会出现seg故障?_Assembly_Segmentation Fault_Fasm - Fatal编程技术网

Assembly 为什么会出现seg故障?

Assembly 为什么会出现seg故障?,assembly,segmentation-fault,fasm,Assembly,Segmentation Fault,Fasm,我想从另一个例程而不是从开始例程(这是入口点)打印argv[1](在C终端中)。但它给出了一个seg故障: format ELF executable 3 entry start segment readable executable start: pop ebx ;argc pop ebp ;argv[0] call printarg ;; exit xor ebx,ebx mov eax,1 int 80h printarg:

我想从另一个例程而不是从开始例程(这是入口点)打印
argv[1]
(在C终端中)。但它给出了一个seg故障:

format ELF executable 3
entry start
segment readable executable

start:
    pop ebx ;argc
    pop ebp ;argv[0]
    call printarg

    ;; exit
    xor ebx,ebx
    mov eax,1
    int 80h

printarg:
    pop ebp ;argv[1]
    call puts
    ret
puts:
    pusha
    mov eax,ebp
    xor edx,edx
    ;; get string length
.loop1:
    cmp byte [eax],0
    je .loop2
    inc eax
    inc edx
    jmp .loop1
    ;; print it
.loop2:
    mov eax,4
    mov ebx,1
    mov ecx,ebp
    int 80h
    ;print a new line
    mov eax,4
    mov ebx,1
    mov ecx,NL
    mov edx,1
    int 80h 
    popa
    ret

segment readable writeable
NL db 0xA
有人能解释一下吗?

你做不到

call something
然后

something:
  pop ebp

并且期望它能工作-在例程中,你弹出的是刚才调用的返回地址。

否:(看起来真的是这样?谢谢。那么,可以在
某物
例程中访问程序的参数吗?当然可以-因为它们刚好在返回地址上方,即
[esp]
,在例行的
mov ebp中,[esp+4]
代替你的
pop ebp
应该在
ebp
中给你
argv[1]
。真的。我忘了。我今天有点沮丧。哈哈,不知道为什么。无论如何,再次感谢你。