1
내 x86-64 커널에서 .rodata
ELF 섹션을 읽기 전용으로 매핑하려고합니다. 그러나 모든 문자열 리터럴은 파일 관련 섹션에 저장됩니다 (예 : .rodata.str1.8
. GCC가 모든 문자열을 .rodata
에 저장하거나 .rodata.str.x
을 ld
, 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 ...
이 무엇을 당신의 링커 스크립트 아닌가 (rodata *.) 해야 할 일?! –
[Ie.] –
아마도 지금하고있는 일을 설명하는 적절한 [mcve]를 제공해야합니다. –