klibc z HEAD
Paweł Sikora
pluto w agmk.net
Pią, 7 Paź 2005, 23:30:34 CEST
Dnia czwartek, 6 października 2005 22:19, Jakub Bogusz napisał:
> Statyczne linkowanie działa poprawnie, przy (domyślnym) dynamicznym jest
> SEGV.
>
> $ cat c.c
> int main() {}
> $ klcc -o c c.c
> $ strace ./c
> execve("./c", ["./c"], [/* 44 vars */]) = -1 EFAULT (Bad address)
> --- SIGSEGV (Segmentation fault) @ 0 (0) ---
dla potomności podam prostszy testcase bez użycia klibc-a.
$ cat xxx.S
.section .text
.global _start
.type _start, w function
_start:
movl $1, %eax
movl $0, %ebx
int $0x80
.end
$ as xxx.S -o xxx.o; ld xxx.o -o xxx -s; objdump -x xxx
xxx: file format elf32-i386
xxx
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048094
Program Header:
LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12
filesz 0x000000a0 memsz 0x000000a0 flags r-x
PAX_FLAGS off 0x00000000 vaddr 0x00000000 paddr 0x00000000 align 2**2
filesz 0x00000000 memsz 0x00000000 flags --- 2800
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000000c 08048094 08048094 00000094 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
Na 2.6.14rc3-git6 taka nic nie robiąca binarka dostaje czape od jądra.
$ strace ./xxx
execve("./xxx", ["./xxx"], [/* 24 vars */]) = -1 EFAULT (Bad address)
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Po małym wyhaczeniu jajka działa...
$ strace ./xxx
execve("./xxx", ["./xxx"], [/* 24 vars */]) = 0
_exit(0)
haczyk (być może nie do końca prawidłowy):
http://cvs.pld-linux.org/cgi-bin/cvsweb/
SOURCES/kernel-hotfixes.patch?r1=1.1.2.62&r2=1.1.2.63
--
The only thing necessary for the triumph of evil
is for good men to do nothing.
- Edmund Burke
Więcej informacji o liście dyskusyjnej pld-devel-pl