2017-12-23 45 views
1

내 x86-64 커널에서 .rodata ELF 섹션을 읽기 전용으로 매핑하려고합니다. 그러나 모든 문자열 리터럴은 파일 관련 섹션에 저장됩니다 (예 : .rodata.str1.8. GCC가 모든 문자열을 .rodata에 저장하거나 .rodata.str.xld, objdump 또는 다른 것을 사용하여 .rodata에 연결할 수 있습니까?GCC는 .rodata에 모든 문자열을 저장합니다.

ENTRY(_start) 

SECTIONS { 
    . = 0xC0100000; 
    kernel_memory_start = .; 
    .boot ALIGN(8) : 
    { 
    *(.multiboot) 
    } 

    .text ALIGN(4K) : AT(ADDR(.text) - 0xC0000000) 
    { 
    kernel_text_start = .; 
    *(.text) 
    } 
    kernel_text_end = .; 
    .rodata ALIGN(4K) : AT(ADDR(.rodata) - 0xC0000000) 
    { 
    kernel_rodata_start = .; 
    *(.rodata) 
    } 
    kernel_rodata_end = .; 

    .data ALIGN(4K) : AT(ADDR(.data) - 0xC0000000) 
    { 
    kernel_data_start = .; 
    *(.data) 
    } 
    kernel_data_end = .; 

    .bss ALIGN(4K) : AT(ADDR(.bss) - 0xC0000000) 
    { 
    kernel_bss_start = .; 
    *(.bss) 
    } 
    kernel_bss_end = .; 
    kernel_memory_end = .; 
} 

컴파일러 플래그 :

gcc -ffreestanding -mcmodel=large -fno-pic -fno-asynchronous-unwind-tables -mno-sse -mno-mmx -mno-3dnow -mno-80387 -fno-unwind-tables ... 

링커 플래그 : 당신의 링커 파일에서

ld -nostdlib -n ... 
+0

이 무엇을 당신의 링커 스크립트 아닌가 (rodata *.) 해야 할 일?! –

+1

[Ie.] –

+1

아마도 지금하고있는 일을 설명하는 적절한 [mcve]를 제공해야합니다. –

답변

2

를 사용 *