Загрузчик ELF может отправить SIGKILL в ваш процесс по разным причинам; у вас, вероятно, неправильный адрес и / или длина где-то в заголовках.
например. сегмент PT_LOAD
должен отображать соответствующую часть исполняемого файла на разумный адрес (обычный адрес для x86 Linux - 0x08048000, хотя это, вероятно, не критично, если он выровнен по страницам, а не 0 и не слишком высок) и адреса как в заголовке секции .text
, так и в точке входа в заголовке ELF должны совпадать с этим.
Нет никаких причин, по которым вы не сможете сделать это вручную (если компоновщик может создать его, вы тоже можете!) - если вы действительно этого хотите. Но учтите, что если вы просто соберете, то ссылка с символами будет удалена (флаг -s
на ld
ниже):
$ cat exit.s
.globl _start
_start:
movl $0,%ebx
movl $1,%eax
int $0x80
$ as -o exit.o exit.s
$ ld -s -o exit exit.o
$ ./exit
$ hexdump -Cv exit
00000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 02 00 03 00 01 00 00 00 54 80 04 08 34 00 00 00 |........T...4...|
00000020 74 00 00 00 00 00 00 00 34 00 20 00 01 00 28 00 |t.......4. ...(.|
00000030 03 00 02 00 01 00 00 00 00 00 00 00 00 80 04 08 |................|
00000040 00 80 04 08 60 00 00 00 60 00 00 00 05 00 00 00 |....`...`.......|
00000050 00 10 00 00 bb 00 00 00 00 b8 01 00 00 00 cd 80 |................|
00000060 00 2e 73 68 73 74 72 74 61 62 00 2e 74 65 78 74 |..shstrtab..text|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000090 00 00 00 00 00 00 00 00 00 00 00 00 0b 00 00 00 |................|
000000a0 01 00 00 00 06 00 00 00 54 80 04 08 54 00 00 00 |........T...T...|
000000b0 0c 00 00 00 00 00 00 00 00 00 00 00 04 00 00 00 |................|
000000c0 00 00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 |................|
000000d0 00 00 00 00 60 00 00 00 11 00 00 00 00 00 00 00 |....`...........|
000000e0 00 00 00 00 01 00 00 00 00 00 00 00 |............|
000000ec
$
... тогда результат в любом случае будет минимальным (вероятно, достаточно минимальным для сравнения с вашим ошибочным файлом, созданным вручную, чтобы увидеть, в чем вы ошиблись).