.code32
.text
.globl _start
_start:
; .globl main
.extern printf
pushl %ebp
movl %esp, %ebp
; subl $4, %esp
movl 4(%ebp), %eax
; movl 12(%ebp), %ebx
; movl $0, %ecx
cmp $2, %eax
jne argCount
pushl %eax
pushl $msg2
call printf
add $8, %esp
movl %ebp, %esp
popl %ebp
; movl $1, %eax
; movl $0, %ebx
; int $0x80
call exit
argCount:
pushl %ebp
movl %esp, %ebp
pushl $msg3
call printf
add $4, %esp
movl %ebp, %esp
popl %ebp
ret
.data
; .asciz "Arg = %s"
msg2: .asciz "Arg Count = %d\n"
msg3: .asciz "This program takes 1 argument -> sizeOfArray\n"
명령 줄에서 인수 개수가 2가 아니고 나에게 세그먼트 오류가 발생하면 함수 argCount가 올바르게 실행되는 이유는 무엇입니까? 프로그램의 전반적인 제어 흐름이 올바르게 작동하지 않는 것 같습니다. 함수 프롤로그 또는 에필로그에 잘못된 것이있을 수 있습니까?이 기능은 작동하지만 세분화 오류가 발생하는 이유는 무엇입니까?
. 당신이'main'을 사용하지 않았다는 사실과 결합하면 (충돌도 마찬가지입니다), 충돌로 이어질 것입니다. 실제로 반환 주소가 스택의 해당 위치에 있지 않기 때문에 'main'을 사용하더라도 충돌이 발생합니다. – Jester
jax는 정확합니다. 왜냐하면 eax의 값이 2가 아닌 경우 argCount를 실행하기 만하면되기 때문입니다. – sdfsdfsdf
특수한 상황을 제외하고는 함수에 'jne'할 수 없기 때문에 올바르지 않습니다. 현재 함수 내부에 레이블을 만들거나 코드를 다시 작성하여 호출 할 수 있습니다. – Jester