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]
。真的。我忘了。我今天有点沮丧。哈哈,不知道为什么。无论如何,再次感谢你。