2013-08-21 2 views
0

다음 코드에서 세그먼트 오류가 발생합니다. GDB에서 실행하는 동안 Segfault in Assembly Code

.section .data 

myarray: 
     .int 10,20,30,40,50,60 

format: 
     .ascii "%d\n" 

.section .text 

.globl _start 
_start: 

movl $2, %ebx 
movl myarray(,%ebx,4) , %ecx 

pushl %ecx 
pushl $format 
addl $8,%esp 
call printf 

movl $1,%eax 
movl $0,%ebx 
int $0x80 

, 나는 내가 잘못 가고 어디를 가리하십시오
Program received signal SIGSEGV, Segmentation fault. 
strchrnul() at ../sysdeps/i386/strchrnul.S:68 
68 ../sysdeps/i386/strchrnul.S: No such file or directory. 
    in ../sysdeps/i386/strchrnul.S 

을 얻고있다.

답변

1

addl $8,%esp은 스택에서 물건을 제거합니다. 바로 위에 올려 진 두 개의 인수를 제거합니다. 이 명령은 전에는 printf을 호출 한 후에 수행해야합니다.

다른 오류가있을 수 있습니다. 나는 철저히 조사하지 않았다. 또한 사용중인 도구 또는 플랫폼을 질문에 지정하지 않았습니다. 플랫폼마다 호출, 인터럽트 및 시스템 루틴에 대해 서로 다른 인터페이스를 사용할 수 있습니다.

+0

Perfect !. 나는 오늘 esp에 필요한 스택 작업을 배우므로 그 위치를 놓쳤습니다. 노력과 시간을 보내 주셔서 감사합니다. 연습을 위해 리눅스와 GNU 어셈블러를 사용하고 있습니다. –