나는 간단한 ASM 파일이 연결하려고 할 때 :링커 출력 '재배치 맞게 잘립니다 : R_X86_64_32'을 yasm 조립 프로그램
$ yasm -f elf64 -g dwarf2 -l my.lst my.asm
링킹 일부를 반환 yasm이 확인 작업에
$ cat my.asm
segment .text
global _start
_start:
mov eax,1
mov ebx,5
int 0x80
조립을 출력 :
$ ld -o my my.o
my.o:(.debug_aranges+0x6): relocation truncated to fit: R_X86_64_32 against `.debug_info'
my.o:(.debug_info+0x6): relocation truncated to fit: R_X86_64_32 against `.debug_abbrev'
my.o:(.debug_info+0xc): relocation truncated to fit: R_X86_64_32 against `.debug_line'
그러나 실행 파일이 만들어지지 않습니다.
내 환경은 다음과 같습니다
$ yasm --version
yasm 1.2.0
$ ld --version
GNU ld (GNU Binutils) 2.23.52.20130604
$ uname -a
CYGWIN_NT-6.1 MYHOST 1.7.25(0.270/5/3) 2013-08-31 20:37 x86_64 Cygwin
코드 조각 및 조립이/연결 방법이 책에서 온이 작동하지 않는 이유에 Introduction to 64bit Intel Assembly Language Programming
모든 포인터가 이해할 수있을 것이다.
* 정확한 * 동일한 상황이 아니더라도 관련성이 있습니다. http://www.technovelty.org/c/relocation-truncated-to-fit-wtf.html 또한 '-a' 및 '-m' 옵션을'yasm'에 지정합니다. '-f'는 객체 형식만을 설정하기 때문에 아마'yasm'에게 코드를 64 비트로 만들어야 할 것입니다. – us2012
오류가 .debug 섹션에있는 것 같습니다. '-g' 스위치없이 조립하면 어떻게됩니까? –
'-g' 스위치를 놓으면 링크가 잘됩니다. 그러나 바이너리를 실행하면 세그먼트 화 오류가 발생합니다. 이 [link] (http://stackoverflow.com/questions/17132781/segmentation-fault-when-run-hello-s-by-gnu-assembler-in-cygwin)는 cygwin이 리눅스 타입 호출에 문제가 있음을 암시합니다. –