2012-09-19 2 views
2

Rasta Ring0 Debugger 버전 0.3을 x86-64 Linux에서 컴파일하려고합니다. Linux 커널 모듈입니다. 나는 내 질문 How to convert Linux 32-bit gcc inline assembly to 64-bit code?에서 설명한대로 정규식 Vim을 사용하여 32 비트 인라인 어셈블리를 64 비트 어셈블리로 대체했으며 gcc는 구문 오류를 제공하지 않습니다. 하지만 몇 가지 다른 오류가 발생합니다.Linux 커널 모듈을 컴파일하는 중 오류가 발생했습니다 : "CONFIG_X86_X32가 활성화되었지만 binutils가 지원되지 않습니다"및 원치 않는 "n"문자가 발생합니다.

내 컴퓨터는 Intel Core i7-2760QM이 장착 된 Lenovo W520 노트북이며 Debian GNU/Linux Wheezy를 사용하고 있습니다.

이 먼저 $ make >make_output.txt 2>&1

make -C /lib/modules/`uname -r`/build/ SUBDIRS=`pwd` modules 
make[1]: Entering directory `/usr/src/linux-3.5.4' 
/usr/src/linux-3.5.4/arch/x86/Makefile:96: CONFIG_X86_X32 enabled but no binutils support 
    CC [M] /home/user/code/rr0d/0.3/module_nux.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/breakpoint.o 
/home/user/code/rr0d/0.3/breakpoint.c: In function ‘insert_bp’: 
/home/user/code/rr0d/0.3/breakpoint.c:66:24: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 

, CONFIG_X86_X32 enabled but no binutils support의 출력 첫번째 라인이다.

/bin/sh: 1: nobjdump: not found 

분명히 nobjdump 같은 그런 프로그램이이 없다 : $ make >make_output.txt 2>&1 출력이 행이,

# 
# Automatically generated file; DO NOT EDIT. 
# Linux/x86_64 3.5.4 Kernel Configuration 
# 
CONFIG_64BIT=y 
# CONFIG_X86_32 is not set 
CONFIG_X86_64=y 
CONFIG_X86=y 
CONFIG_INSTRUCTION_DECODER=y 
CONFIG_OUTPUT_FORMAT="elf64-x86-64" 
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig" 

둘째 :하지만 내 사용자 정의 커널 .config에 그것은 64 비트 시스템이 있다고 분명 objdump이어야합니다. 이 n의 출처는 어디입니까? 이 같은 오류는 나중에 ld과 함께 nld의 형식으로 표시됩니다. 이 오류가 발생한 모든 아이디어가 해결 될 수 있습니까? Makefile에서

# EXTRA_CFLAGS += -O2 -Wall -DLINUX_26 
EXTRA_CFLAGS += -O2 -Wall -DLINUX_26 -m64 

OBJ   := module_nux.o breakpoint.o buffering.o command.o disasmbak.o idt.o 
OBJ   += keyboard.o page.o video.o utils.o import_symb.o core_rr0d.o pci.o 
MODULE  := rr0d.o 

obj-m  := $(MODULE) 
rr0d-objs := $(OBJ) 

default: 
    make -C /lib/modules/`uname -r`/build/ SUBDIRS=`pwd` modules 

clean: 
    rm -f *.o .*.o.cmd .*.ko.cmd *.mod.c *~ 
    rm -rf .tmp_versions 

mrproper: 
    make clean 
    rm -f *.ko 

내가 EXTRA_FLAGS-m64을 추가하지만이 make 출력을 변경하지 않은 :

Makefile은 다음이다.

/bin/sh: 1: nobjdump: not found 

/bin/sh: 1: nobjdump: not found 

/bin/sh: 1: nld: not found 

명확가 없어야 3 개 n 문자있다 : 출력 결국

는 (전체 출력은 아래) 전술 한 것과 동일한 유형의 세 이상의 오류가있다. 아마도 이것은 'parrot' sample device driver for Linux 2.6 and 3.0을 컴파일하려고 할 때 동일한 오류가 발생했기 때문에 Rasta Ring0 디버거와 관련이 없습니다.

그래서, 어떤 아이디어가 이러한 컴파일 오류를 해결하는 방법? 며칠 동안 인터넷 검색이 도움이되지 못했고 완전히 아이디어가 없습니다.

make -C /lib/modules/`uname -r`/build/ SUBDIRS=`pwd` modules 
make[1]: Entering directory `/usr/src/linux-3.5.4' 
/usr/src/linux-3.5.4/arch/x86/Makefile:96: CONFIG_X86_X32 enabled but no binutils support 
    CC [M] /home/user/code/rr0d/0.3/module_nux.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/breakpoint.o 
/home/user/code/rr0d/0.3/breakpoint.c: In function ‘insert_bp’: 
/home/user/code/rr0d/0.3/breakpoint.c:66:24: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/breakpoint.c:74:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/breakpoint.c:80:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/breakpoint.c:81:46: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/breakpoint.c: In function ‘is_breakpoint’: 
/home/user/code/rr0d/0.3/breakpoint.c:127:30: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/breakpoint.c: In function ‘parse_inst’: 
/home/user/code/rr0d/0.3/breakpoint.c:310:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/breakpoint.c:312:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/breakpoint.c: In function ‘is_hw_breakpoint’: 
/home/user/code/rr0d/0.3/breakpoint.c:600:40: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/buffering.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/command.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/disasmbak.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/idt.o 
/home/user/code/rr0d/0.3/idt.c: In function ‘translate_logic_to_linear’: 
/home/user/code/rr0d/0.3/idt.c:92:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/idt.c: In function ‘visualise_idt’: 
/home/user/code/rr0d/0.3/idt.c:157:1: warning: the frame size of 2064 bytes is larger than 2048 bytes [-Wframe-larger-than=] 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/keyboard.o 
/home/user/code/rr0d/0.3/keyboard.c: In function ‘back_disasm’: 
/home/user/code/rr0d/0.3/keyboard.c:500:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/keyboard.c:511:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/keyboard.c: In function ‘handle_scancode’: 
/home/user/code/rr0d/0.3/keyboard.c:784:25: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/keyboard.c:839:55: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/keyboard.c:1230:24: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/keyboard.c:1245:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/keyboard.c:1250:43: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/page.o 
/home/user/code/rr0d/0.3/page.c: In function ‘basetp’: 
/home/user/code/rr0d/0.3/page.c:68:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/page.c: In function ‘get_page_info’: 
/home/user/code/rr0d/0.3/page.c:190:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/page.c:193:23: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c: In function ‘write_save_dirty’: 
/home/user/code/rr0d/0.3/page.c:355:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c:359:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c: In function ‘poked1’: 
/home/user/code/rr0d/0.3/page.c:405:49: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c:434:33: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c:447:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/page.c:472:17: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/video.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/utils.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/import_symb.o 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/core_rr0d.o 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘printf_disasm’: 
/home/user/code/rr0d/0.3/core_rr0d.c:314:16: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:318:53: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:319:17: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:344:12: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:358:44: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:393:50: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:417:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘dump_data’: 
/home/user/code/rr0d/0.3/core_rr0d.c:457:11: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:459:16: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:464:53: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:465:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘_kbdhandle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:817:41: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:824:45: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:841:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘kbdhandle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:845:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘step_by_step’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1041:44: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1063:49: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1181:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int0_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1185:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1366:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int1_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1370:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘_int3_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1430:30: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1495:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int3_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1499:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1540:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int6_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1544:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1586:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int13_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1589:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘_int14_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1605:32: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1606:36: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1648:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int14_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1651:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘_int128_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1664:32: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1665:36: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: At top level: 
/home/user/code/rr0d/0.3/core_rr0d.c:1687:1: warning: ‘cdecl’ attribute ignored [-Wattributes] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘int128_handle’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1691:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘init_rr0d’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1791:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1794:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1846:18: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1848:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1849:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1850:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1851:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1852:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1853:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1854:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c:1869:49: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 
/home/user/code/rr0d/0.3/core_rr0d.c: In function ‘cleanup_rr0d’: 
/home/user/code/rr0d/0.3/core_rr0d.c:1938:36: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] 
/bin/sh: 1: nobjdump: not found 
    CC [M] /home/user/code/rr0d/0.3/pci.o 
/bin/sh: 1: nobjdump: not found 
    LD [M] /home/user/code/rr0d/0.3/rr0d.o 
/bin/sh: 1: nld: not found 
make[2]: *** [/home/user/code/rr0d/0.3/rr0d.o] Error 127 
make[1]: *** [_module_/home/user/code/rr0d/0.3] Error 2 
make[1]: Leaving directory `/usr/src/linux-3.5.4' 
make: *** [default] Error 2 
+3

[CONFIG_X86_X32] (http://cateee.net/lkddb/web-lkddb/X86_X32.html) = y 어딘가에 .config 파일이 있습니까? [x32 ABI] (http://en.wikipedia.org/wiki/X32_ABI)가 활성화되어 있고 툴 체인이 지원하지 않는 것 같습니다. –

+0

@Banthar 네 말이 맞아. 나는'CONFIG_X86_32'와'CONFIG_X86_X32'를 혼동했다. 이제 커널을 재 컴파일 한 다음 RR0D를 컴파일하는 새로운 시도. – nrz

+0

@Banthar 고마워, 그걸로'CONFIG_X86_X32' 문제가 해결되었습니다. 그러나'nobjdump'와'nld'가 없기 때문에 오류가 발생합니다. – nrz

답변

0

이러한 두 문제 Banthar로 나타낸 바와 같이, 먼저 자신에 의해 제 2 해결 한 후 자신에게 응답 :

이 (이미 위에서 제시된 8 개 라인을 포함) 전체 $ make >make_output.txt 2>&1 출력된다.

첫 번째 문제는 CONFIG_X86_32CONFIG_X86_X32이 서로 다른 두 변수입니다. binutils 지원과 관련된 문제를 해결하려면 CONFIG_X86_X32 (64 비트 모드의 경우 x32 ABI)을 N으로 설정해야합니다.

다른 문제는 nobjdumpnld 함께 :

/bin/sh: 1: nobjdump: not found 

/bin/sh: 1: nld: not found 

이 심볼릭 쉽게 고정 될 수

$ su 
# cd /usr/bin 
# ln -s objdump nobjdump 
# ln -s ld nld 
2

바이너리 유틸리티를 설치 및 구동의 경로 B/W 공백을 제거하려고 . 자세한 이것을 체크 아웃 : /usr/src/linux-headers-*-common/arch/x86/Makefile 에서 binutils 검사가 실패 할 경우

http://ubuntu.aspcode.net/view/635400140124705175559046/compiling-error-while-installing-realtek-rtl8111e-in-64-bit-1310-configx86x32-enabled-but-no-binutils-support

+0

. 고마워, 내 머리카락을 찢어 버리고 있었다. (그리고 BTW, 위의 링크는 이제 고장 났지만 당신의 대답은 충분했다. – Dullroar

0

이 경고가 나타납니다 binutils 조립 컴파일이 성공적인되지 않은 경우

ifdef CONFIG_X86_X32 
    x32_ld_ok := $(call try-run,\ 
      /bin/echo -e '1: .quad 1b' | \ 
      $(CC) $(KBUILD_AFLAGS) -c -x assembler -o "$$TMP" - && \ 
      $(OBJCOPY) -O elf32-x86-64 "$$TMP" "$$TMPO" && \ 
      $(LD) -m elf32_x86_64 "$$TMPO" -o "$$TMP",y,n) 
     ifeq ($(x32_ld_ok),y) 
       CONFIG_X86_X32_ABI := y 
       KBUILD_AFLAGS += -DCONFIG_X86_X32_ABI 
       KBUILD_CFLAGS += -DCONFIG_X86_X32_ABI 
     else 
       $(warning CONFIG_X86_X32 enabled but no binutils support) 
     endif 
endif 

그것은 실패했습니다. 위의 수동으로 확인할 수 있습니다 명령 (실행 파일과 플래그가 다를 수 있습니다) :

CC=gcc-6 
KBUILD_AFLAGS="-D__ASSEMBLY__ -m64" 
OBJCOPY=objcopy 
LD=ld 
TMP=/tmp/dummytmp.tmp 
TMPO=/tmp/dummyo.o 

/bin/echo -e '1: .quad 1b' | \ 
$CC $KBUILD_AFLAGS -c -x assembler -o "$$TMP" - && \ 
$OBJCOPY -O elf32-x86-64 "$$TMP" "$$TMPO" && \ 
$LD -m elf32_x86_64 "$$TMPO" -o "$$TMP" 

데비안 (그리고 아마도 우분투) 사용자는 시스템의 무결성을 확인할 수 있습니다

debsums -s 

을 그리고 깨진 패키지를 다시 설치

apt-get install --reinstall <space separated packages>