2010-11-22 2 views
2

저는 레드햇을 리눅스 7.3 (이전, 알고 있습니다)로 실행 중이며 지난 몇 개월 동안 어셈블리 프로그래밍을 배웠습니다. 작은 프로그램 작성 및 nasm으로 컴파일하기. 몇 달 동안, 일들이 잘 진행되어 왔고, 지금은 알려지지 않은 이유로 컴파일 된 프로그램을 실행할 수 없습니다. 지금linux는 컴파일 할 때마다 실행 파일에 바이너리 파일을 실행할 수 없습니다. chmod 777이 도움이되지 않습니다.

nasm file.s //used to work just fine, then I'd execute ./file 

, 내가 ./file 실행 먼저 내가 전에 일이 사용한 적이있는, "권한 거부"얻는다. 그런 다음, 일단 chmod +777 파일, 나는 "이진 파일을 실행할 수 없습니다"얻을.

나는 왜 그런 일이 일어나는지에 대해 아무런 생각도하지 않지만, 나는 아무 것도 컴파일하지 않기 때문에 매우 실망 스럽다.

루트로 로그인해도 아무런 변화가 없습니다. 모든 제안을 환영합니다. 감사합니다.

+0

파일을 컴파일 한 후에'ls -l'의 출력을 게시하십시오. "실행할 수 없음"오류는 잘못 생성 된 바이너리 (연결되지 않은 아키텍처, 잘못된 아키텍처 등)에 의해 발생할 수 있습니다. –

답변

1

사용자가 작동하는 파일 시스템이 noexec 옵션으로 마운트 된 경우에 발생할 수 있습니다. mount | grep noexec을 통해이를 확인할 수 있으며 현재 작업중인 디렉토리에 문제가 있는지 확인할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 나는 그것을 타이핑했고 아무것도 돌려 보내지 않았다. –

+0

이상하게 들리지만 Red Hat에 익숙하지 않습니다. 일반 '마운트'의 출력은 얼마입니까? – dennycrane

+0

이 문제가 발생하면 "이진 파일을 실행할 수 없습니다"오류 메시지가 "사용 권한이 거부되었습니다". – zwol

0

/var/log에서 시스템의 변경 사항을 찾으려고 시도 할 수 있습니다.

3

nasm은 실행 파일을 생성하지 않지만 gcc -c와 같은 객체 파일 만 생성합니다. 여전히 링커를 실행해야합니다.

N.B : "0777은 거의 항상 잘못된 것입니다."

2

은 바이너리에 file 명령을 실행하고 있는지가 실행 파일로 올바르게 식별하고 확인합니다.

ldd 명령을 사용해보십시오. 그것은 똑같은 이유로 실패 할 가능성이 높지만 한 번 할 가치가 있습니다.

1

"이진 파일을 실행할 수 없습니다"는 ENOEXECstrerror(3) 메시지입니다. (execve(2)의 맨 페이지를 인용)

[ENOEXEC]   The new process file has the appropriate access 
        permission, but has an unrecognized format 
        (e.g., an invalid magic number in its header). 

그래서 그게 무슨 뜻인지 당신의 nasm 호출이 아니라 뭔가 다른 실행 파일을 생성하는 것이 아니라,이다 : 그것은 매우 구체적인 의미를 갖습니다. John Kugelman이 제안한대로 file 명령이 무엇인지 알려 줄 것입니다 (user502515는 링크가없는 오브젝트 파일 일 가능성이 매우 높지만 자신이 직접 nasm을 사용하지는 않으므로 잘 모릅니다).

Intel bizarro-world 구문을 사용하지 않는 아키텍처 용 어셈블리 코드를 다시 작성해야하는 경우가 아니라 지금 GAS/"AT & T"어셈블리 구문을 배우면 스스로 부탁합니다. . 그리고 내가 당신은 실제로 손을 최적화 해야하는 내부 루프 서브 루틴에만 어셈블리를 사용하고 바랍니다.

1

이것은 방금 나에게 일어났습니다.

file <executable name>

그것을 출력을 실행 한 후 <file name> ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped

그리고 문제는 내가 32 비트 컴퓨터의 64 비트 응용 프로그램을 실행하려고했던 것을!

관련 문제