2013-11-20 2 views
0

У меня есть создать мир, приложение приветствия для моего ARMv6 ... но она не запускаетсярука привет мир не запускается - команда выровнена не страница выровнена

./hello.out 
> Killed 

ldd ./hello.out 
> $ not a dynamic executable 

/lib/ld-linux.so.3 --list ./hello.out 
> ./hello.out: error while loading shared libraries: ./hello.out: ELF load command alignment not page-aligned 

Что «команда выровнена не страница выровнено» имею в виду?

+0

Это, вероятно, не является правильным исполняемым файлом в первую очередь. – auselen

+2

Опубликуйте код, команды сборки, идентификатор компилятора и компоновщика и объяснение среды, в которой вы пытаетесь ее запустить. –

ответ

0

Это означает, что один из сегментов в вашем файле ELF не выравнивается по странице. Страницы обычно выровнены на границах байтов 4096 (0x1000).

Вы можете проверить файл ELF с readelf команды, смотрите, например, заголовки программ для Баша:

$ readelf -l /bin/bash 

Elf file type is EXEC (Executable file) 
Entry point 0x419b80 
There are 9 program headers, starting at offset 64 

Program Headers: 
    Type   Offset    VirtAddr   PhysAddr 
       FileSiz   MemSiz    Flags Align 
    PHDR   0x0000000000000040 0x0000000000400040 0x0000000000400040 
       0x00000000000001f8 0x00000000000001f8 R E 8 
    INTERP   0x0000000000000238 0x0000000000400238 0x0000000000400238 
       0x000000000000001c 0x000000000000001c R  1 
    [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2] 
    LOAD   0x0000000000000000 0x0000000000400000 0x0000000000400000 
       0x00000000000bca0c 0x00000000000bca0c R E 200000 
    LOAD   0x00000000000bcde0 0x00000000006bcde0 0x00000000006bcde0 
       0x0000000000003d1c 0x000000000000d4e8 RW  200000 
    DYNAMIC  0x00000000000bcdf8 0x00000000006bcdf8 0x00000000006bcdf8 
       0x0000000000000200 0x0000000000000200 RW  8 
    NOTE   0x0000000000000254 0x0000000000400254 0x0000000000400254 
       0x0000000000000044 0x0000000000000044 R  4 
    GNU_EH_FRAME 0x00000000000a8a00 0x00000000004a8a00 0x00000000004a8a00 
       0x0000000000002ea4 0x0000000000002ea4 R  4 
    GNU_STACK  0x0000000000000000 0x0000000000000000 0x0000000000000000 
       0x0000000000000000 0x0000000000000000 RW  10 
    GNU_RELRO  0x00000000000bcde0 0x00000000006bcde0 0x00000000006bcde0 
       0x0000000000000220 0x0000000000000220 R  1 

Два LOAD секции имеет выравнивание 200000. Это правильный кратный 0x1000 (4096).

Смежные вопросы