2012-01-08 2 views
2

현재 Trisquel 배포판에서 어셈블리를 배우려고합니다. (우분투는 우분투에서 사용하는 것 같습니다.) 웬일인지, 나는 어셈블리 스 니펫을 만들고 실행하는 첫 걸음에 붙어있다. 내가 정확히 여기 무슨 일이 일어나고 있는지 확실하지 않다bash는 바이너리 파일을 실행할 수 없습니다.

> as myexit.s -o myexit.o && ld myexit.o -o myexit 
> ./myexit 
bash: ./myexit: cannot execute binary file 

:

.section data 

.section text 
.globl _start 
_start: 
movl $1, %eax # syscall for exiting a program 
movl $0, %ebx # status code to be returned 
int $0x80 

내가 조립하고 실행 파일을 만들기 위해 그것을 연결하고 실행 파일을 실행하려고

, 내가 뭔가를 얻을. 주위를 검색 한 후,이 오류는 대개 64 비트 OS에서 32 비트 실행 파일을 실행하려고 시도 할 때 발생하거나 또는 그 반대 일 수 있습니다.

$ file myexit 
myexit: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped 
$ uname -a 
Linux user 2.6.35-28-generiC#50trisquel2-Ubuntu SMP Tue May 3 00:54:52 UTC 2011 i686 GNU/Linux 

사람이 정확히 잘못 여기에 무슨 일이 일어나고 있는지 이해 나를 도울 수 : 여기

file의 출력과 uname 명령입니다? 감사.

+1

실행 비트가 거기에 있습니까? –

+0

@Uku : 그렇습니다. 그렇지 않으면 정상적으로'permission denied' 오류가 발생합니다. – sasuke

+0

내 생각에 그냥 확인 만합니다. –

답변

4
.section text 

당신이 .text 섹션으로 코드를 필요로 할 때 text라는 섹션을 만듭니다, 올바르지 않습니다. 그걸로 대체 :

.data 

.text 
.globl _start 
_start: 
    ... 
+0

와우, 정말 고마워! 'data'를'.data'와'text'로'.text'로 바꾸면 코드는 매력처럼 작동합니다. – sasuke

관련 문제